<?

/*****************************************************************
*                                                                *
*  This is NOT the LATEST version of Big Sam.                    *
*  Please got to http://bigsam.gezzed.net to get a newer one.    *
*                                                                *
*                The Big Sam Team, bigsam@gezzed.net             *
*                                                                *
*****************************************************************/


// *************************************************************** //
// *                                                             * //
// *    BIG SAM   :   Built-In Guestbook / Stand-Alone Module    * //
// *               Version 1.1.10  March, 21th 2002              * //
// *                                                             * //
// * Copyleft 2000 Georges Zadrozynski & Rémi Lecoupé-Grainville * //
// *             gezzed@gezzed.net & remilg@free.fr              * //
// *                                                             * //
// *         Homepage : http://www.atilla.org/bigsam/            * //
// *                Mail : bigsam@gezzed.net                     * //
// *                                                             * //
// *     This source is under GNU/GPL General Public License     * //
// *                                                             * //
// *************************************************************** //


/*
    BIG SAM - Built-In Guestbook / Stand-Alone Module - PHP Guestbook
    Copyright (C) Georges Zadrozynski & Rémi Lecoupé-Grainville
    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.
*/

$version "1.1.10";

    
/**********************************
    * Configuration Step 1 : Language *
    **********************************/

// Please remove all the unwanted language blocks

//ENGLISH
$langAdminError         "Administrator Error";    
$langBsGuestbook        "BIG SAM Guestbook";    
$langChPassword            "Change Password";
$langEmail                 "E-mail :";
$langEntry                "Entry";
$langGbAdmin            "Guestbook Administration";
$langMessage             "Message :";
$langName                 "Name :";
$langnewPassword         "New Password :";    
$langOpenError            "Error opening file !<br>Be sure writing is allowed in this directory.";
$langPassChanged        "The password has been changed.";    
$langPassError            "The new passwords don't match !";
$langPassword            "Change <i>Big Sam</i> Password";
$langRetype                "Retype new Password :";
$langSubmit             "Send the message";
$langSubmitModif        "Submit Modifications";    
$langSystemError         "System Error";    
$langSystemMessage        "System Message";    
$langWrongPassword        "Wrong Admin Password";


/*
// FRENCH
$langAdminError         = "Erreur Administrateur";    
$langBsGuestbook        = "BIG SAM - Livre d'Or";    
$langChPassword            = "Changement de mot de passe";
$langEmail                 = "E-mail :";
$langEntry                = "Message";
$langGbAdmin            = "Administration";
$langMessage             = "Message :";
$langName                 = "Nom :";
$langnewPassword         = "Nouveau mot de passe :";    
$langOpenError            = "Erreur d'ouverture de fichier !<br>Assurez-vous d'avoir les droits d'écriture.";
$langPassChanged        = "Le mot de passe a été changé.";    
$langPassError            = "Les mots de passe ne correspondent pas.";
$langPassword            = "Changer le mot de passe de <i>Big Sam</i>";
$langRetype                = "Confirmez le mot de passe :";
$langSubmit             = "Envoyer le message";
$langSubmitModif        = "Confirmer les modifications";    
$langSystemError         = "Erreur Système";    
$langSystemMessage        = "Message du Système";    
$langWrongPassword        = "Mauvais mot de passe";    

// GERMAN
// By Klaus-Peter Walter & Götz Waschk (waschk@informatik.uni-rostock.de)
$langAdminError         = "Administrator Fehler";    
$langBsGuestbook        = "BIG SAM G&auml;stebuch";    
$langChPassword            = "&Auml;ndere Passwort";
$langEmail                 = "eMail :";
$langEntry                = "Eintrag";
$langGbAdmin            = "G&auml;stebuch Administration";
$langMessage             = "Ihre Nachricht :";
$langName                 = "Name :";
$langnewPassword         = "Neues Passwort :";    
$langOpenError            = "Fehler beim &ouml;ffnen der Datei !<br>Sind Sie sicher, dass Sie die richtigen Rechte f&uuml;r dieses Verzeichnis besitzen ?";
$langPassChanged        = "Neues Passwort OK.";    
$langPassError            = "Das neue Password funktioniert nicht !";
$langPassword            = "&Auml;ndere <i>Big Sam</i> Passwort";
$langRetype                = "Wiederholen Sie das neue Passwort :";
$langSubmit             = "Nachricht abschicken";
$langSubmitModif        = "&Auml;nderungen abschicken";    
$langSystemError         = "System Fehler";    
$langSystemMessage        = "System Nachricht";    
$langWrongPassword        = "Falsches Administrator-Passwort";    

// SPANISH
// By Valéry Frémaux (vf@eisti.fr)
$langAdminError            = "Error Del Administrador";
$langBsGuestbook        = "BIG SAM Guestbook ";
$langChPassword            = "Cambio del pass";
$langEmail                = "E-mail: ";
$langEntry                = "Elemento: ";
$langGbAdmin            = "Administración Del Guestbook";
$langMessage            = "Mensaje: ";
$langName                = "Nombre: ";
$langnewPassword         = "Nuevo pass: ";
$langOpenError            = "Error de escritura del fichero!<br>Verifica que es possible escribir en este directorio.";
$langPassChanged        = "Se ha cambiado el pass.";
$langPassError            = "Los pass no corresponden!";
$langPassword            = "Cambie el pass de <i>Big Sam</i>";
$langRetype                = "Confirma su nuevo pass: ";
$langSubmit                = "Manda ";
$langSubmitModif        = "Manda Las Modificaciones";
$langSystemError        = "Error Sistema";
$langSystemMessage        = "Mensaje del sistema";
$langWrongPassword        = "Pass Incorrecto";     

// DUTCH
// By Dimitri van Hees (p.vanhees@chello.nl)
$langAdminError         = "Beheerfout";    
$langBsGuestbook        = "Gastenboek";    
$langChPassword            = "Verander wachtwoord";
$langEmail                 = "E-mail :";
$langEntry                = "Entry";
$langGbAdmin            = "Gastenboek beheer";
$langMessage             = "Bericht :";
$langName                 = "Naam :";
$langNewPassword         = "Nieuw wachtwoord :";    
$langOpenError            = "Fout bij openen bestand !<br>CHMOD moet 777 zijn in deze map.";
$langPassChanged        = "Het wachtwoord is veranderd.";    
$langPassError            = "Het zijn verschillende wachtwoorden !";
$langPassword            = "Verander <i>Big Sam</i> wachtwoord";
$langRetype                = "Type het nieuwe wachtwoord nogmaals :";
$langSubmit             = "Zet in gastenboek!";
$langSubmitModif        = "Breng veranderingen aan";    
$langSystemError         = "Systeemfout";    
$langSystemMessage        = "Systeembericht";    
$langWrongPassword        = "Verkeerd wachtwoord!";

// ITALIAN
// By Piero Mannelli (webmaster@subnet.it)
$langAdminError            = "Errore Amministratore";
$langBsGuestbook        = "BIG SAM Guestbook";
$langChPassword            = "Cambia Password";
$langEmail                = "E-mail :";
$langEntry                = "Messaggio";
$langGbAdmin            = "Amministrazione Guestbook";
$langMessage            = "Messaggio :";
$langName                = "Nome :";
$langnewPassword        = "Nuova password :";
$langOpenError            = "Errore di apertura del file !<br>Assicurati che la directory abbia i permessi di scrittura.";
$langPassChanged        = "La password è stata cambiata.";
$langPassError            = "La nuova password non corrisponde !";
$langPassword            = "Cambia la Password di <i>Big Sam</i>";
$langRetype                = "Ripeti password :";
$langSubmit                = "Invia il messaggio";
$langSubmitModif        = "Invia modifiche";
$langSystemError        = "Errore di sistema";
$langSystemMessage        = "Messaggio di sistema";
$langWrongPassword        = "Password Amministratore Errata";

// DANISH 
// By Steven Rasmussen (sr@danmedia.dk) & Thomas H. Jørgensen (holmen@mail.nu )
$langAdminError = "Administrationsfejl"; 
$langBsGuestbook = "BIG SAM Gæstebog"; 
$langChPassword = "Skift kodeord"; 
$langEmail = "E-mail :"; 
$langEntry = "Indlæg"; 
$langGbAdmin = "Administration af gæstebogen"; 
$langMessage = "Meddelelse :"; 
$langName = "Navn :"; 
$langnewPassword = "Nyt kodeord :"; 
$langOpenError = "Fejl ved åbning af fil!<br> Kontrollér at du har skriveadgang til denne mappe."; 
$langPassChanged = "Kodeordet er ændret."; 
$langPassError = "De nye kodeord er ikke ens!"; 
$langPassword = "Skift <i>Big Sam</i> kodeord"; 
$langRetype = "Gentag nye kodeord:"; 
$langSubmit = "Send meddelelse"; 
$langSubmitModif = "Send ændringer"; 
$langSystemError = "Systemfejl"; 
$langSystemMessage = "Systembesked"; 
$langWrongPassword = "Forkert administratorkodeord";

// PORTUGUESE
// By Guilherme Halls (halls@email.com.br)
$langAdminError            = "Erro do Administrador"; 
$langBsGuestbook        = "BIG SAM Guestbook"; 
$langChPassword            = "Alterar a senha";
$langEmail                = "E-mail :";
$langEntry                = "Entrada";
$langGbAdmin            = "Administração do Guestbook";
$langMessage            = "Mensagem :";
$langName                = "Nome :";
$langnewPassword        = "Nova Senha :"; 
$langOpenError            = "Erro Abrindo o arquivo!<br>Certifique que o diretório está com permição para gravação.";
$langPassChanged        = "A senha foi alterada."; 
$langPassError            = "As senhas são diferentes !";
$langPassword            = "Mudar a senha do <i>Big Sam</i>";
$langRetype                = "Confirme a nova senha :";
$langSubmit                = "Postar a mensagem";
$langSubmitModif        = "Aplicar Modificações"; 
$langSystemError        = "Erro no Sistema"; 
$langSystemMessage        = "Mensagem do Sistema"; 
$langWrongPassword        = "Senha incorreta";

// RUSSIAN
// By Roman Svetlov (rtype@mail.ru)
$langAdminError           = "ïÛÉÂËÁ ÁÄÍÉÎÉÓÔÒÁÔÏÒÁ";      
$langBsGuestbook          = "çÏÓÔÅ×ÁÑ ËÎÉÇÁ BIG SAM";     
$langChPassword           = "éÚÍÅÎÉÔØ ÐÁÒÏÌØ";
$langEmail                = "E-mail :";
$langEntry                = "úÁÐÉÓØ";
$langGbAdmin              = "áÄÍÉÎÉÓÔÒÉÒÏ×ÁÎÉÅ ÇÏÓÔÅ×ÏÊ ËÎÉÇÉ";
$langMessage              = "óÏÏÂÝÅÎÉÅ :";
$langName                 = "éÍÑ :";
$langnewPassword          = "HÏ×ÙÊ ÐÁÒÏÌØ :";     
$langOpenError            = "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ !<br>÷ÏÚÍÏÖÎÏ ÚÁÐÒÅÝÅÎÁ ÚÁÐÉÓØ × ÄÉÒÅËÔÏÒÉÀ.";
$langPassChanged          = "ðÁÒÏÌØ ÉÚÍÅÎÅÎ.";    
$langPassError            = "ðÁÒÏÌÉ ÒÁÚÌÉÞÎÙ !";
$langPassword             = "éÚÍÅÎÉÔÅ ÐÁÒÏÌØ <i>Big Sam</i>";
$langRetype               = "ðÏ×ÔÏÒÉÔÅ ÎÏ×ÙÊ ÐÁÒÏÌØ :";
$langSubmit               = "ïÓÔÁ×ÉÔØ ÚÁÐÉÓØ";
$langSubmitModif          = "ðÏÄÔ×ÅÒÄÉÔØ ÉÚÍÅÎÅÎÉÑ";      
$langSystemError          = "óÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ";   
$langSystemMessage        = "óÉÓÔÅÍÎÏÅ ÓÏÏÂÝÅÎÉÅ";        
$langWrongPassword        = "HÅÐÒÁ×ÉÌØÎÙÊ ÐÁÒÏÌØ ÁÄÍÉÎÉÓÔÒÁÔÏÒÁ";

// CREOLE
// By Pascal Lombard (plombard_00@yahoo.fr)
$langAdminError         = "Administratér'la twompé koy'";       
$langBsGuestbook        = "BIG SAM - Livre d'Or";       
$langChPassword         = "Changé passwod'la";
$langEmail              = "Ba moin email ou :";
$langEntry              = "Ladja pawol'";
$langGbAdmin            = "Administré bagay'la";
$langMessage            = "Sa ki pawol'ou :";
$langName               = "Sa ki nomw' ti mal' ?";
$langnewPassword        = "Ba moin a bel ti passwod :"; 
$langOpenError          = "An pé pa wouvè fichier'a!<br>ès ou ni cé dwouèt'la ?";
$langPassChanged        = "Passwod'la fini changé";     
$langPassError          = "Cé dé passwod'la pa pareil.";
$langPassword           = "Changé passwod <i>Big Sam</i>'la";
$langRetype             = "Tapé'y enco :";
$langSubmit             = "Vwéyé pawol'la";
$langSubmitModif        = "Changé tout'cé bagay'la";    
$langSystemError        = "Systèm'la pa ka maché";      
$langSystemMessage      = "Tann'bien ! Systèm'la ka diw";       
$langWrongPassword      = "An-an, ti mal'! Sa pa passwod'la !";

// CATALAN
// By Alfredo Prades (afprades@yahoo.es----http://pagina.de/terrik)
$langAdminError         = "Error del administradoe";
$langBsGuestbook        = "BIG SAM Guestbook";
$langChPassword         = "Canvi del pass";
$langEmail              = "E-mail: ";
$langEntry              = "Element: ";
$langGbAdmin            = "Administració del llista de visites";
$langMessage            = "Mensaje: ";
$langName               = "Nom: ";
$langnewPassword        = "Nou pass: ";
$langOpenError          = "Error de escritura de ficher!<br>Verifica que es posible escriure en este directori.";
$langPassChanged        = "Se ha canviat el pass.";
$langPassError          = "Els pass no corresponen!";
$langPassword           = "Cavie el pass de <i>Big Sam</i>";
$langRetype             = "Confirme el seu nou pass: ";
$langSubmit             = "Envia ";
$langSubmitModif        = "Envia les modificacions";
$langSystemError        = "Error Sistema";
$langSystemMessage      = "Mensaje del sistema";
$langWrongPassword      = "Pass Incorrecte";

// NORWEGIAN
// By Lasse G. Dahl (news@lassedahl.com)
$langAdminError    = "Administrasjonsfeil";
$langBsGuestbook   = "Big Sam Gjestebok";
$langChPassword    = "Endre passord";
$langEmail         = "E-post:";
$langEntry         = "Oppføring";
$langGbAdmin       = "Gjestebokadministrasjon";
$langMessage       = "Melding:";
$langName          = "Navn:";
$langnewPassword   = "Nytt passord:";
$langOpenError     = "Feil ved åpning av fil!<br>Kontroller at serveren har
skrivetilgang i denne katalogen.";
$langPassChanged   = "Passordet er endret.";
$langPassError     = "Passordene stemmer ikke overens!";
$langPassword      = "Endre <i>BIG SAM</I>-passord";
$langRetype        = "Gjenta passord:";
$langSubmit        = "Send din melding";
$langSubmitModif   = "Send endring";
$langSystemError   = "Systemfeil";
$langSystemMessage = "Systemmelding";
$langWrongPassword = "Feil administratorpassord";

*/


    /*******************************************
    * Configuration Step 2 : Carbon Copy Email *
    *******************************************/
    
    
// carbonCopy = 1 enables mail sending to mailRecipient. 
// mailRecipient receives a mail each times an entry is entered (if carbonCopy = 1)
// mailSubject is the subject of the mail which is sent.
$carbonCopy =         0;
$mailRecipient =     "your.mail@your.isp";
$mailSubject =        "[BIG SAM] New Guestbook Entry";


    
/********************************
    * Configuration Step 3 : Colors *
    ********************************/


// Choosing colors (Remove the unwanted color-model)

/*
// Standard (Greys, bright background)
$colorWhite    = "\"#FFFFFF\"";
$colorBlack    = "\"#000000\"";
$colorHeads    = "\"#666666\"";
$colorBody1    = "\"#EEEEEE\"";
$colorBody2    = "\"#DDDDDD\"";
*/

// The Following is the BIG SAM standard
$colorWhite    "\"#FFFFFF\"";
$colorBlack    "\"#000000\"";
$colorHeads    "\"#42426F\"";
$colorBody1    "\"#FFF8DC\"";
$colorBody2    "\"#EFE8CC\"";

// Data submission form colors
$formHeadColor    $colorHeads;
$formBodyColor    $colorBody1;
$formTailColor    $colorBody2;
$formHeadText     $colorWhite;
$formBodyText     $colorBlack;
// Guestbook entries colors
$entryHeadColor   $colorHeads;
$entryBodyColor1  $colorBody2;
$entryBodyColor2  $colorBody1;
$entryHeadText    $colorWhite;
$entryBodyText1   $colorBlack;
$entryBodyText2   $colorHeads;
// Messages colors
$adminHeadColor   $colorHeads;
$adminHeadText    $colorWhite;
$adminBodyColor1  $colorBody2;
$adminBodyText1   $colorBlack;
$adminBodyColor2  $colorBody1;
$adminBodyText2   $colorHeads;


    
/********************************
    * Configuration Step 4 : Header *
    ********************************/
    
    
function displayHeader()
    {
    global 
$version;
    
header ("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
    echo (
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
    echo (
"<!-- BIG SAM v.$version * Built_In Guestbook / Stand_Alone Module * http://www.atilla.org/bigsam/ -->\n");
    
// You migh use and include instead of all this :
    // include ("head.inc");
    
echo ("<html>\n");
    echo (
"<head><title>Big Sam GuestBook</title></head>");
    echo (
"<body bgcolor=\"#FFFFFF\">\n");
    }

    
/********************************
    * Configuration Step 5 : Footer *
    ********************************/
    
    
function displayFooter()
    {
    echo (
"</body></html>");
    }


    
/******************************************************
    * Configuration Step 6 : Number of messages displayed *
    ******************************************************/
    

// Number of fields to be displayed simultaneously.
// To display everything, set $displayStep to 0.
$displayStep 20;


    
/************************************************
    * Configuration Step 7 : Allow AutoLink Suystem *
    ************************************************/
$allowAutoLink=1;

    
/************************
    * End of Configuration  *
    ************************/


// $absoluteScriptPath is the name of the current script (this file) and which is going to
// be modified by itself. This means that (theoretically) this file can be 
// placed anywhere on the system, with any fileName.
$absoluteScriptPath      $PATH_TRANSLATED;
$relativeScriptPath     $PHP_SELF;

// when the php preprocessor is installed as an independant binary (as CGI).
if ($PATH_INFO!="")
    {
    
$relativeScriptPath     $PATH_INFO;
    }

// to be used when $PHP_SELF contains virtual directory reference
// (for multi-users servers, eg : free.fr, online.fr ...)
if (($SERVER_NAME=="php.proxad.net")||(($SERVER_NAME=="php3.pro.proxad.net")))
    {
    
$relativeScriptPath     substr($relativeScriptPathstrpos(substr($relativeScriptPath1), "/")+1);
    }


$theName=substr($absoluteScriptPath0strrpos($absoluteScriptPath"."));
$extension=substr($absoluteScriptPathstrrpos($absoluteScriptPath".")+1);


// The dataFile contains all the guestbook entries, and $adminpassword .
// $adminpassword is the password which will be asked for any administration
// actions. This password could be changed only if in admin mode (old 
// $adminpassword matches $admin).

// Defines the name of the database file where the entries are stored.
$dataFile "${theName}.dat.${extension}";



//******************************************************************************
// function displayForm : Display the form which enables the client to type a
// message.

function displayForm()
    {
    global 
$relativeScriptPath;
    
$borderThickness 3;

    global 
$formHeadColor;
    global 
$formBodyColor;
    global 
$formTailColor;
    global 
$formHeadText;
    global 
$formBodyText;
    
    global 
$langName;
    global 
$langEmail;
    global 
$langMessage;
    global 
$langSubmit;
    
    
// Writing HTML Code
    
echo ("<center>\n");
    echo (
"<form method=\"POST\" action=\"$relativeScriptPath\"><table border=\"0\" cellspacing=\"0\" cellpadding=\"3\">\n");
    echo (
"<tr bgcolor=$formHeadColor>\n");
    echo (
"<td><font color=$formHeadText><b>$langName</b></font><input name=\"name\" size=\"20\" maxlength=\"50\"></td>\n");
    echo (
"<td>&nbsp;</td>\n");
    echo (
"<td align=right><font color=$formHeadText><b>$langEmail</b></font><input name=\"email\" size=\"20\" maxlength=\"50\"></td>\n");
    echo (
"</tr>\n");
    echo (
"<tr bgcolor=$formBodyColor><td colspan=\"3\">\n");
    echo (
"<font color=$formBodyText><b>$langMessage</b></font><br>\n");
    echo (
"<center><textarea name=\"message\" cols=\"60\" rows=\"7\"></textarea></center>\n");
    echo (
"</td></tr>\n");
    echo (
"<tr bgcolor=$formTailColor><td colspan=\"3\" align=\"right\">\n");
    echo (
"<input type=\"submit\" value=\"$langSubmit\">");
    echo (
"</td></tr>\n");
    echo (
"</table>\n");
    echo (
"</form>\n");
    echo (
"</center>\n");
    }

//******************************************************************************
// function displayMessage displays the $errorMessage error message.

function displayMessage($errorMessage,$msgType)
    {
    global 
$adminHeadColor;
    global 
$adminHeadText;
    global 
$adminBodyColor1;
    global 
$adminBodyText1;
    global 
$adminBodyColor2;
    global 
$adminBodyText2;
    global 
$langAdminError;
    global 
$langSystemError;
    global 
$langSystemMessage;
    global 
$langBsGuestbook;

    
displayHeader();
    echo (
"<table width=\"100%\" height=\"100%\"><tr><td width=\"100%\" valign=\"middle\" align=\"center\">");
    echo (
"<table cellspacing=\"0\" border=\"0\" width=\"250\"><tr><td bgcolor=$adminHeadColor>");
    echo (
"<font Color=$adminHeadText size=\"-3\">&nbsp; $langBsGuestbook</font><br>");
    echo (
"</td></tr><tr><td bgcolor=$adminBodyColor1><font color=$adminBodyText1>");
    if (
$msgType=="1"// Admin Message
        
echo ("<i>&nbsp; $langAdminError</i>");
    if (
$msgType=="2"// System Error
        
echo ("<i>&nbsp; $langSystemError</i>");
    if (
$msgType=="3"// System Message
        
echo ("<i>&nbsp; $langSystemMessage</i>");
    echo (
"</font>");
    echo (
"</td></tr><tr><td bgcolor=$adminBodyColor2 align=\"center\">");
    echo (
"<font color=$adminBodyText2>");
    echo (
"<br><b>$errorMessage</b><br><br>");
    echo (
"</font></td></tr></table><p>&nbsp;</p>\n");
    echo (
"</td></tr></table>");
    
displayFooter();
    exit;
    }


//******************************************************************************
// function standardizeText filters ambiguous chains in $str

function standardizeStoredText($str)
    {
    
$str str_replace("\\'""'"$str);
    
$str str_replace("\\\"""\""$str);
    
$str htmlspecialchars($str);
    
$str str_replace("\n""<br>"$str);
    
$str str_replace("$""&#036;"$str);
    return 
$str;
    }
    

function 
standardizeDisplayedText($str)
    {
    return 
$str;
    }
    
function 
standardizeAdminText($str)
    {
    return 
$str;
    }
    
    
function 
seekHttp($rawText)
{    
    
$pattern = array(
        
"/http:\/\/((\w|\.|\?|\%|=|\/|-)*)/",
        
"/mailto:((\w|\.|@|-)*)/");    
    
$replacement = array(
        
"<a href=\"http://\\1\" target=\"_blank\">http://\\1</a>",
        
"<a href=\"mailto:\\1\">\\1</a>");
    
$hyperLinkedText=preg_replace($pattern$replacement$rawText);    
        
    return 
$hyperLinkedText;
}


//******************************************************************************
// function Xfopen : opens a file $fileName and locks it
function Xfopen($fileName$openMode$sharing)
    {
    global 
$langOpenError;
    
$fp=@fopen($fileName$openMode);
    if (!
$fp
        {
        
displayMessage($langOpenError,2);
        }
    if (
$sharing==true)
        {
        
$op=1;
        }
    else
        {
        
$op=2;
        }
    if (!@
flock($fp,$op))
        {
        @
flock($fp,3);
        
displayMessage("<i>flock</i> timeout",2);
        }
    return 
$fp;
    }

//******************************************************************************
// function Xfclose : unlocks the file $fp and closes it
function Xfclose($fp)
    {
    @
flock($fp,3);
    @
fclose($fp);
    }


//******************************************************************************
// function fullDisplay
function fullDisplay()
{
        global 
$displayStep,$displayBegin$maxDisplay ;
        global 
$entryHeadColor,$entryHeadText$entryBodyColor1,$entryBodyText1$entryBodyColor2,$entryBodyText2 ;
        global 
$relativeScriptPath;
        global 
$index;
        global 
$archive_mail$archive_name$archive_text$archive_date;
        global 
$allowAutoLink;

        
// Checks if $displayBegin is not too large (Thanks to Ahmet Sabri ALPER <salper@olympos.org>)
        
if ($displayBegin>$maxDisplay)
            {
            
$displayBegin=$maxDisplay-$displayStep+1;
            }
            
        
displayHeader();
        
        
// Displays the entry form to enable the client to type a message.
        
displayForm();

        if (
$index==0)
            {
            
displayFooter();
            return;
            }


        echo (
"<p>&nbsp;</p>\n");

        
// Message arrays are displayed here :
        
        
echo "<center>\n";
        
        
// Displaying all the entries.
        
        
if ($displayStep==0)
            {
            
$displayBegin=1;
            
$displayStep=$index;
            }
        
        if (
$displayBegin==1)
            {
            
$startAt=$index $displayStep;
            if (
$startAt==0$startAt=$displayStep;
            }
        else 
            {
            
$startAt=$displayBegin+$displayStep-1;
            }
        
        
        for (
$msgNumber=$startAt $msgNumber>=$displayBegin $msgNumber--)
            {
            echo (
"<table cellspacing=\"0\" border=\"0\" width=\"600\"><tr><td bgcolor=$entryHeadColor>");
            echo (
"<font color=$entryHeadText size=\"-3\">&nbsp; &nbsp; $archive_date[$msgNumber] &nbsp; &nbsp;</font>");
            echo (
"</td></tr><tr><td bgcolor=$entryBodyColor1>");
            echo (
"<font Color=$entryBodyText1><b>");
            if (
$archive_mail[$msgNumber]!="")
                {
                echo (
"$msgNumber : <a title=\"".standardizeDisplayedText($archive_mail[$msgNumber])."\" href=\"mailto:".standardizeDisplayedText($archive_mail[$msgNumber])."\">".standardizeDisplayedText($archive_name[$msgNumber])."</a>");
                }
            else 
                {
                echo (
"$msgNumber : ".standardizeDisplayedText($archive_name[$msgNumber]));
                }
            echo (
"</b></font>");
            echo (
"</td></tr><tr><td bgcolor=$entryBodyColor2>");
            echo (
"<font color=$entryBodyText2>");
            if (
$allowAutoLink==1) echo ("<b>".seekHttp(standardizeDisplayedText($archive_text[$msgNumber]))."</b>");
            else echo (
"<b>".standardizeDisplayedText($archive_text[$msgNumber])."</b>");
            echo (
"</font></td></tr></table><br><br>\n");
            }
        
        echo (
"<p>&nbsp;</p>\n");
        
        for(
$i=1;$i<=$index;$i=$nextEnd+1)
            {
            
$nextBegin $i;
            
            if (
$i==1)
                {
                
$nextEnd=$index $displayStep;
                if (
$nextEnd==0$nextEnd=$displayStep;
                }
            else 
$nextEnd   $i+$displayStep-1;
            
            if (
$displayBegin==$nextBegin && $nextEnd!=$nextBegin) echo ("<tt>[</tt>$nextBegin-$nextEnd<tt>]</tt>\n");
            else if (
$displayBegin==$nextBegin && $nextEnd==$nextBegin) echo ("<tt>[</tt>$nextBegin<tt>]</tt>\n");
            else if (
$nextEnd==$nextBegin) echo ("<a href=\"$relativeScriptPath?displayBegin=$nextBegin\"><tt>[</tt>$nextBegin<tt>]</tt></a>\n");
            else echo (
"<a href=\"$relativeScriptPath?displayBegin=$nextBegin\"><tt>[</tt>$nextBegin-$nextEnd<tt>]</tt></a>\n");    
            }
        
        echo 
"</center>\n";
        
displayFooter();
}

//******************************************************************************

function readData($resetBegin)
{
    global 
$adminpassword;
    global 
$index;
    global 
$dataFile;
    global 
$archive_mail$archive_name$archive_text$archive_date;
    global 
$displayBegin$displayStep$maxDisplay;

    
// Includes automatically filled data arrays :
    
$index 0;
    
$fout=Xfopen($dataFile"r"true);
    include(
$dataFile);
    
Xfclose($fout);
    
// From now, $index will indicate the number of data entries.
    
    // Beginning of the data to be displayed, default = 1
         
if (!isset($displayBegin)) $displayBegin="";
    if (
$displayBegin=="" || $resetBegin==1
        {
        
$displayBegin $index-$displayStep+1;
        if (
$displayBegin<=0$displayBegin=1;
        }
        
    
// Sets the maximum that $displayBegin can reach
    
$maxDisplay $index;
}
//******************************************************************************




// If the Datafile does not exist, creates it.
if (!file_exists(${dataFile})) 
    {
    
$fout Xfopen($dataFile"w+"false);
    
fputs($fout"<?\n");
    
fputs($fout"\$adminpassword = \"bigsam\";\n");
    
fputs($fout"\$archive_name[++\$index] = \"The BigSam Team\";\n");
    
fputs($fout"\$archive_mail[  \$index] = \"bigsam@gezzed.net\";\n");
    
fputs($fout"\$archive_date[  \$index] = \"11th March 2001 - 12:00:00 PM\";\n");
    
fputs($fout"\$archive_text[  \$index] = \"Thank you for using Big Sam v.$version.\";\n");
    
fputs($fout"?>");
    
Xfclose ($fout);
    }



if (!isset(
$admin)) 
    {
    if (!isset(
$name)) { $name=""$message=""; }
    if (
$name=="" || $message==""
        {
                
        
/****************************************************************************************
        * Use Case no 1-A                                    *
        *                                            *
        * This case is encountered when a client simply wants to add a message to the        *
        * guestbook. (Every variable is empty);                            *
        ************************************************************************************/
        
readData(0);
        
fullDisplay();
        exit;
        }
    else 
        {
        
        
/********************************************************************************
        * Use Case no 1-B                                *
        *                                        *
        * Case is encountered when a client has just filled in the appropriate fields    *
        * (name, mail, message).                            *
        *    $name    = "Some Name"                            *
        *    $email   = "Some@Email"                            *
        *    $message = "Some Message"                        *
        *        Simply add message in the top of all previous messages.        *
        ********************************************************************************/
        
        
$position filesize($dataFile);
        
        
$fout Xfopen($dataFile"r+"false);
        
fseek($fout,$position-2);
        
$insert_msgdate date"dS F Y - h:i:s A" );
        
$name=standardizeStoredText($name);
        
$email=standardizeStoredText($email);
        
$message=standardizeStoredText($message);
        
fputs ($fout,"\$archive_name[++\$index] = \"$name\";\n");
        
fputs ($fout,"\$archive_mail[  \$index] = \"$email\";\n");
        
fputs ($fout,"\$archive_date[  \$index] = \"$insert_msgdate\";\n");
        
fputs ($fout,"\$archive_text[  \$index] = \"$message\";\n");
        
fputs ($fout,"\n?>");
        
Xfclose($fout);
        
        
// Sending a mail to $mailRecipient if $carbonCopy=1, with the subject $mailSubject.
        
if ($carbonCopy==1)
            {
            
$message str_replace("<br>""\n"$message);
            
$mailBody "From: $name <$email>\n$insert_msgdate\n\n$message";
            
mail($mailRecipient,$mailSubject,$mailBody,"From: $email\nReply-to: $name <$email>");
            }
        if (
strpos($HTTP_REFERER"?")==false$page=$HTTP_REFERER;
        else 
$page=substr($HTTP_REFERER0strpos($HTTP_REFERER"?"));
        
header("Location: $page?");
        exit;
        }
    }
    else
    {
    
readData(0);
    if (
$admin==$adminpassword
        {
        if (
$command==""
            {
    
            
displayHeader();
            
            
/************************************************************************
            * Use Case no 2-A                            *
            *                                    *
            * Admin mode (The administrator can modify password, fields, or remove    *
            * messages).                                *
            *    $admin   = $adminpassword                    *
            *        Shows a password modification form.            *
            *        Shows all messages and enables to modify/delete them.    *
            ************************************************************************/
            
            
echo("<center><h2>BIG SAM</h2><h4>$langGbAdmin</h4></center>\n");
            echo(
"<br>\n");
            
            
// Display the form which enables the admin to change his password
            
echo ("<center><form method=\"POST\" action=\"$relativeScriptPath\">\n");
            echo (
"<table cellspacing=\"0\" border=\"0\">\n");
            echo (
"<tr><td bgcolor=$adminHeadColor colspan=\"2\"><font color=$adminHeadText>\n");
            echo (
"&nbsp;<b>$langPassword</b>.</font></td></tr>\n");
            echo (
"<tr><td align=right bgcolor=$adminBodyColor2>");
            echo (
"<font color=$adminBodyText2>&nbsp; $langnewPassword</font></td>\n");
            echo (
"<td align=left bgcolor=$adminBodyColor2>");
            echo (
"<input type=\"password\" name=\"newPassword1\">&nbsp;</td></tr>\n");
            echo (
"<tr><td align=\"right\" bgcolor=$adminBodyColor2>");
            echo (
"<font color=$adminBodyText2>&nbsp; $langRetype</font></td>\n");
            echo (
"<td align=left bgcolor=$adminBodyColor2>");
            echo (
"<input type=\"password\" name=\"newPassword2\">&nbsp;</td></tr>\n");
            echo (
"<tr><td bgcolor=$adminBodyColor1 colspan=2 align=\"center\">\n");
            echo (
"<input type=\"hidden\" name=\"admin\" value=\"$admin\">\n");
            echo (
"<input type=\"hidden\" name=\"command\" value=\"passwd\">\n");
            echo (
"<input type=\"submit\" value=\"$langChPassword\"></td></tr>\n");
            echo (
"</table>\n");
            echo (
"</form></center>\n");
            
            echo(
"<br><hr><br>\n");
            
            
// Message arrays are displayed here in forms in order to modify them :
            
            
echo ("<center><form method=\"POST\" action=\"$relativeScriptPath\">\n");
            
            for (
$i=$i<=$index $i++)
                {
                
$msgNumber $index $i 1;
                
$str str_replace("<br>""\n"$archive_text[$msgNumber]);
                echo (
"<table cellspacing=\"0\" cellpadding=\"3\"><tr><td colspan=\"4\" bgcolor=$adminHeadColor>\n");
                echo (
"<font color=$adminHeadText><b>&nbsp;");
                echo (
"$langEntry #$msgNumber</b>.</font>&nbsp;</td></tr>\n");
                echo (
"<tr bgcolor=$adminBodyColor2>\n");
                    echo (
"<td>&nbsp;<input type=\"checkbox\" name=\"keep${msgNumber}\" checked>&nbsp;</td>\n"); 
                echo (
"<td><input name=\"name${msgNumber}\" value=\"".standardizeAdminText($archive_name[$msgNumber])."\"></td>\n");
                echo (
"<td><input name=\"email${msgNumber}\" value=\"".standardizeAdminText($archive_mail[$msgNumber])."\"></td>\n");
                echo (
"<td><input name=\"date${msgNumber}\" value=\"".standardizeAdminText($archive_date[$msgNumber])."\"></td>\n");
                echo (
"<tr bgcolor=$adminBodyColor1>\n");
                echo (
"<td colspan=\"4\" align=\"center\"><textarea cols=\"60\" rows=\"2\" name=\"message${msgNumber}\">".standardizeAdminText($str));
                echo (
"</textarea></td>\n</tr></table>\n<br>\n");
                }
            echo (
"<input type=\"hidden\" name=\"admin\" value=\"$admin\">\n");
            echo (
"<input type=\"hidden\" name=\"index\" value=\"$index\">\n");
            echo (
"<input type=\"hidden\" name=\"command\" value=\"modify\">\n");
            echo (
"<input type=\"submit\" value=\"$langSubmitModif\">\n");
            echo (
"</form></center>\n");
            
displayFooter();
            exit;
            
            } 
        else if (
$command=="passwd")
            {
            
// Use Case no 2-B
            // Admin mode (The administrator is modifying his password.).
            //    $admin        = $adminpassword
            //    $newPassword1 = "New Password 1"
            //    $newPassword2 = "New Password 2"
            //         Check if $newPassword1 matches $newPassword2
            //         Set the $adminpassword line to :
            //         $adminpassword = "$newPassword1" in the dataFile
            
            
if($newPassword1!=$newPassword2)
                {
                
// The passwords doesn't match
                
displayMessage("$langPassError",1);
                }
            else
                {
                
// Rewrites the whole Datafile with the new password, and all the entries.
                
$fout Xfopen($dataFile"w"false);
                
fputs ($fout,"<?\n");
                
fputs ($fout,"\$adminpassword = \"$newPassword1\";\n");
                for (
$i=$i<=$index ; ++$i)
                    {
                    
fputs ($fout,"\$archive_name[++\$index] = \"${archive_name[$i]}\";\n");
                    
fputs ($fout,"\$archive_mail[  \$index] = \"${archive_mail[$i]}\";\n");
                    
fputs ($fout,"\$archive_date[  \$index] = \"${archive_date[$i]}\";\n");
                    
fputs ($fout,"\$archive_text[  \$index] = \"${archive_text[$i]}\";\n");
                    }
                
fputs ($fout,"?>");
                
Xfclose($fout);
                
displayMessage("$langPassChanged",3);
                exit;
                }
            }
        else if (
$command=="modify"
            {
            
            
/********************************************************************************
            * Use Case no 2-C                                *
            *                                        *
            * Admin mode (The administrator is updating entries).                *
            *    $admin      = $adminpassword                        *
            *    $nameXXX    = "Modified name (no XXX)"                    *
            *    $emailXXX   = "Modified email (no XXX)"                    *
            *    $messageXXX = "Modified message (no XXX)"                *
            *    $keep       = "on" or ""                        *
            *     Check if $admin matches $adminpassword.                    *
            *     Rewrites ALL the fields except when $keepXXX = ""            *
            *    Rewrites the whole Datafile with the new password, and all the entries.    *
            ********************************************************************************/
            
            
$fout Xfopen($dataFile"w"false);
            
fputs ($fout,"<?\n");
            
fputs ($fout,"\$adminpassword = \"$adminpassword\";\n");    
                for (
$i=$i<=$index $i++)
                {
                
// Get values from the form, and standardize them
                
$variable="name$i";
                
$name=standardizeStoredText("${$variable}");
                
$variable="email$i";
                
$email=standardizeStoredText("${$variable}");
                
$variable="date$i";
                
$insert_msgdate=standardizeStoredText("${$variable}");
                
$variable="message$i";
                
$message=standardizeStoredText("${$variable}");
                
                
$variable="keep$i";
                if (${
$variable}!="")
                    {
                    
fputs ($fout,"\$archive_name[++\$index] = \"$name\";\n");
                    
fputs ($fout,"\$archive_mail[  \$index] = \"$email\";\n");
                    
fputs ($fout,"\$archive_date[  \$index] = \"$insert_msgdate\";\n");
                    
fputs ($fout,"\$archive_text[  \$index] = \"$message\";\n");
                    }
                }    
            
fputs ($fout,"?>");
            
Xfclose($fout);
            
            if (
strpos($HTTP_REFERER"?")==false$page=$HTTP_REFERER;
            else 
$page=substr($HTTP_REFERER0strpos($HTTP_REFERER"?"));
            
header("Location: $page?");
            exit;
            }
        } 
    else 
        {
        
        
/************************************************
        * Use Case no 2-Z                *
        *                        *
        * If $admin does NOT match $adminpassword.    *
        *    $admin   != $adminpassword        *
        *    Error message : "Wrong Admin Password"    *
        ************************************************/
        
        
displayMessage("$langWrongPassword",1);
        }
    }
?>