F:\WEBSITES\testbed\zipped\yabb_svn_new\branches\2.5.2\cgi-bin\yabb2\Sources\Register.pl F:\WEBSITES\testbed\zipped\yabb_svn_new\trunk\cgi-bin\yabb2\Sources\Register.pm
############################################################################### ###############################################################################
# Register.pl                                                                 # # Register.pm                                                                 #
  # $Date: 01.05.16 $                                                           #
############################################################################### ###############################################################################
# YaBB: Yet another Bulletin Board                                            # # YaBB: Yet another Bulletin Board                                            #
# Open-Source Community Software for Webmasters                               # # Open-Source Community Software for Webmasters                               #
# Version:        YaBB 2.5.2                                                  # # Version:        YaBB 2.6.12                                                 #
# Packaged:       October 21, 2012                                            # # Packaged:       January 5, 2016                                             #
# Distributed by: http://www.yabbforum.com                                    # # Distributed by: http://www.yabbforum.com                                    #
# =========================================================================== # # =========================================================================== #
# Copyright (c) 2000-2012 YaBB (www.yabbforum.com) - All Rights Reserved.     # # Copyright (c) 2000-2016 YaBB (www.yabbforum.com) - All Rights Reserved.     #
# Software by:  The YaBB Development Team                                     # # Software by:  The YaBB Development Team                                     #
#               with assistance from the YaBB community.                      # #               with assistance from the YaBB community.                      #
############################################################################### ###############################################################################
  # use strict;
  # use warnings;
  no warnings qw(uninitialized once redefine);
  use CGI::Carp qw(fatalsToBrowser);
  use English '-no_match_vars';
  our $VERSION = '2.6.12';
   
  $registerpmver = 'YaBB 2.6.12 $Revision: 1651 $';
  if ( $action eq 'detailedversion' ) { return 1; }
   
  if ( !$iamguest
     && ( !$admin && $action ne 'activate' && $action ne 'admin_descision' ) )
  {
     fatal_error('no_registration_logged_in');
  }
   
  require Sources::Mailer;
  LoadLanguage('Register');
  LoadCensorList();
   
$registerplver = 'YaBB 2.5.2 $Revision: 1.6 $';  get_template('Register'); 
if ($action eq 'detailedversion') { return 1; }  
if (!$iamguest && (!$admin && $action ne 'activate' && $action ne 'admin_descision') ) { &fatal_error("no_registration_logged_in"); }  if ( $OSNAME =~ /Win/sm ) { 
     my $regstyle = q~ style="text-transform: lowercase"~;
require "$sourcedir/Mailer.pl";  } 
&LoadLanguage('Register');  else { 
&LoadCensorList;     my $regstyle = q{}; 
   
if ($^O =~ /Win/) {  
   my $regstyle = qq~ style="text-transform: lowercase"~;  
} else {  
   my $regstyle = '';  
} }
   
sub Register { sub Register {
   if ($regtype == 0 && $iamguest) { &fatal_error("registration_disabled"); }    if ( $regtype == 0 && $iamguest ) { fatal_error('registration_disabled'); }
   my ($tmpregname, $tmprealname, $tmpregemail, $tmpregpasswrd1, $tmpregpasswrd2, $hidechecked, @birthdate);     if ( $RegAgree == 1 && $FORM{'regnoagree'} ) { 
   $yytitle = $register_txt{'97'};         $yySetLocation = qq~$scripturl~; 
   $yynavigation = qq~› $register_txt{'97'}~;         redirectexit(); 
   if ($FORM{'reglanguage'}) {     } 
       $language = $FORM{'reglanguage'};     if ( $RegAgree == 1 && !$FORM{'regagree'} ) { 
       &LoadLanguage('Register');         $yytitle      = qq~$register_txt{'97'}~; 
   }         $yynavigation = qq~› $register_txt{'97'}~; 
   if ($FORM{'regusername'}) { $tmpregname     = $FORM{'regusername'}; }         if ($language) { 
   if ($FORM{'regrealname'}) { $tmprealname    = $FORM{'regrealname'}; }             fopen( AGREE, "$langdir/$language/agreement.txt" ); 
   if ($FORM{'email'})       { $tmpregemail    = $FORM{'email'}; }        }
   if ($FORM{'hideemail'} || !exists $FORM{'hideemail'}) { $hidechecked = qq~ checked="checked"~; }         else { 
   if ($FORM{'add_field0'})    { $newfield       = $FORM{'add_field0'}; }             fopen( AGREE, "$langdir/$lang/agreement.txt" ); 
   if ($FORM{'passwrd1'})    { $tmpregpasswrd1 = $FORM{'passwrd1'}; }        }
   if ($FORM{'passwrd2'})    { $tmpregpasswrd2 = $FORM{'passwrd2'}; }         @agreement = <AGREE>; 
   if ($FORM{'reason'})      { $reason         = $FORM{'reason'}; }         fclose(AGREE); 
   if ($FORM{'birth_day'})   { $birthdate[0]   = $FORM{'birth_day'}; }         $fullagree = join q{}, @agreement; 
   if ($FORM{'birth_month'}) { $birthdate[1]   = $FORM{'birth_month'}; }         $fullagree =~ s/\n/<br \/>/gsm; 
   if ($FORM{'birth_year'})  { $birthdate[2]   = $FORM{'birth_year'}; }         $yymain .= $myregister_fullagree; 
         $yymain =~ s/{yabb fullagree}/$fullagree/sm;
   ## moved langopt setup to subs.pl         template(); 
   if (!$langopt) { &guestLangSel; }         exit; 
     }
   if (-e "$vardir/email_domain_filter.txt" ) { require "$vardir/email_domain_filter.txt"; }     my ( 
   if ($adomains) {         $tmpregname,     $tmprealname, $tmpregemail,    $tmpregpasswrd1, 
       @domains = split (/\,/, $adomains);         $tmpregpasswrd2, $hidechecked, $reg_start_time, @birthdate 
       $aedomains = qq~<table border="0" width="100%" cellspacing="0" cellpadding="0"><tr><td><input type="text" maxlength="100" name="email" id="email" value="$tmpregemail" size="15" /></td><td><select name="domain" id="domain">~;     ); 
       foreach (@domains) { $aedomains .= ($_ =~ m/\@/) ? qq~<option value="$_">$_</option>~ : qq~<option value="\@$_">&#64;$_</option>~; }     $yytitle      = $register_txt{'97'}; 
       $aedomains .= qq~</select></td></tr></table>~;     $yynavigation = qq~&rsaquo; $register_txt{'97'}~; 
     if ( $FORM{'reglanguage'} ) {
   } else {         $language = $FORM{'reglanguage'}; 
       $aedomains .= qq~<input type="text" maxlength="100" onchange="checkAvail('$scripturl',this.value,'email')" name="email" id="email" value="$tmpregemail" size="45" />~;         LoadLanguage('Register'); 
   }    }
     if ( $FORM{'regusername'} ) { $tmpregname  = $FORM{'regusername'}; }
   $yymain .= qq~     if ( $FORM{'regrealname'} ) { $tmprealname = $FORM{'regrealname'}; } 
<script language="JavaScript1.2" type="text/javascript" src="$yyhtml_root/ajax.js"></script>     if ( $FORM{'email'} )       { $tmpregemail = $FORM{'email'}; } 
<form action="$scripturl?action=register2" method="post" name="creator" onsubmit="return CheckRegFields();">     if ( $FORM{'hideemail'} || !exists $FORM{'hideemail'} ) { 
<table border="0" width="100%" cellpadding="4" cellspacing="1" class="bordercolor">         $hidechecked = q~ checked="checked"~; 
   <colgroup>     } 
       <col width="45%" />     if ( $FORM{'add_field0'} )  { $newfield       = $FORM{'add_field0'}; } 
       <col width="55%" />     if ( $FORM{'passwrd1'} )    { $tmpregpasswrd1 = $FORM{'passwrd1'}; } 
   </colgroup>     if ( $FORM{'passwrd2'} )    { $tmpregpasswrd2 = $FORM{'passwrd2'}; } 
   <tr>     if ( $FORM{'reason'} )      { $reason         = $FORM{'reason'}; } 
       <td colspan="2" class="titlebg">     if ( $FORM{'birth_day'} )   { $birthdate[0]   = $FORM{'birth_day'}; } 
           <img src="$imagesdir/register.gif" alt="$register_txt{'97'}" title="$register_txt{'97'}" border="0" />     if ( $FORM{'birth_month'} ) { $birthdate[1]   = $FORM{'birth_month'}; } 
           <span class="text1"><b>$register_txt{'97'}</b> $register_txt{'517'}</span>     if ( $FORM{'birth_year'} )  { $birthdate[2]   = $FORM{'birth_year'}; } 
       </td>  
   </tr>     $min_reg_time ||= 0; 
   <tr>     if ( $min_reg_time > 0 ) { 
       <td class="windowbg" colspan="2" align="center">         $reg_start_time = 
           $register_txt{'97a'}           qq~<input type="hidden" name="reg_start_time" value="$date" />~; 
       </td>     } 
   </tr>~;  
     if ( !$langopt ) { guestLangSel(); }
   if ($morelang > 1) {  
       $yymain .= qq~     if ( -e "$vardir/email_domain_filter.txt" ) { 
   <tr>         require "$vardir/email_domain_filter.txt"; 
       <td class="windowbg" align="right" valign="top">     } 
           <label for="reglanguage"><b>$register_txt{'101'}</b></label>     if ($adomains) { 
       </td>         @domains = split /\,/xsm, $adomains; 
       <td class="windowbg2" align="left" valign="top">         $aedomains = $myaedomains_a; 
           <select name="reglanguage" id="reglanguage" onchange="document.creator.action='$scripturl?action=register'; document.creator.submit();">         $aedomains =~ s/{yabb tmpregemail}/$tmpregemail/sm; 
           $langopt         foreach (@domains) { 
           </select>             $aedomains .= 
           <noscript><input type="submit" value="$maintxt{'32'}" class="button" /></noscript>               ( $_ =~ m/\@/xsm ) 
       </td>               ? qq~<option value="$_">$_</option>~ 
   </tr>~;               : qq~<option value="\@$_">&commat;$_</option>~; 
   }        }
     $newfield = q{};         $aedomains .= $myaedomains_b; 
   $yymain .= qq~     } 
<!--user name section-->     else { 
   <tr>         $aedomains .= 
       <td class="windowbg" align="right" valign="top">  qq~<input type="text" maxlength="100" onchange="checkAvail('$scripturl',this.value,'email')" name="email" id="email" value="$tmpregemail" size="45" />~; 
           <label for="regusername"><b>$register_txt{'98'}:</b><br />     } 
           <span class="small">$register_txt{'520'}$register_txt{'241ea'}</span></label>  
       </td>     $yymain .= qq~ 
       <td class="windowbg2" align="left" valign="top">  <script type="text/javascript" src="$yyhtml_root/ajax.js"></script> 
           <input autocomplete="off" type="text" name="regusername" id="regusername" onchange="checkAvail('$scripturl',this.value,'user')" size="30" value="$tmpregname" maxlength="18"$regstyle /> *  <form action="$scripturl?action=register2" method="post" name="creator" onsubmit="return CheckRegFields();" accept-charset="$yymycharset"> 
           <div id="useravailability"></div>     $reg_start_time~; 
           <input type="hidden" name="language" id="language" value="$language" />     if ( $RegAgree == 1 && $FORM{'regagree'} ) { 
       </td>         $yymain .= q~ 
   </tr>  <input type="hidden" name="regagree" value="yes" />~; 
   <tr>     } 
       <td class="windowbg" align="right" valign="top">     $yymain .= $myregister_regfill_a; 
           <label for="regrealname"><b>$register_txt{'98a'}:</b>~;  
   if ($name_cannot_be_userid) {    if ( $morelang > 1 ) {
       $yymain .= qq~         $yymain .= $myregister_morelang; 
           <br /><span class="small">$register_txt{'521'}</span>~;         $yymain =~ s/{yabb langopt}/$langopt/sm; 
   }    }
   $yymain .= qq~</label>     $newfield = q{}; 
       </td>  ## user name section 
       <td class="windowbg2" align="left" valign="top">     $yymain .= $myregister_regfill_b; 
           <input type="text" name="regrealname" id="regrealname" onchange="checkAvail('$scripturl',this.value,'display')" size="30" value="$tmprealname" maxlength="30" /> *     $yymain =~ s/{yabb tmpregname}/$tmpregname/sm; 
           <div id="displayavailability"></div>     $yymain =~ s/{yabb regstyle}/$regstyle/sm; 
       </td>     $yymain =~ s/{yabb language}/$language/sm; 
   </tr>  
   <tr>     if ($name_cannot_be_userid) { 
       <td class="windowbg" align="right" valign="top"><label for="email"><b>$register_txt{'69'}:</b>         $yymain .= qq~ 
           <br /><span class="small">$register_txt{'679'}</span></label>             <br /><span class="small">$register_txt{'521'}</span>~; 
       </td>     } 
       <td class="windowbg2" align="left" valign="top">  
           $aedomains *     $email2 = q{}; 
           <div id="emailavailability"></div>     if ( $imp_email_check == 1 ) { 
   ~;         eval { 
   if ($allow_hide_email == 1) {             require Net::DNS; 
       $yymain .= qq~         }; 
           <br /><input type="checkbox" name="hideemail" id="hideemail" value="1"$hidechecked /> <label for="hideemail">$register_txt{'721'}</label>         if (!$EVAL_ERROR ) { 
       ~;             $email2 = $myregister_email2; 
   }             $email2 =~ s/{yabb email2}/$register_txt{'70'}/sm; 
   $yymain .= qq~         } 
       </td>     } 
   </tr>  
   ~;     $yymain .= $myregister_avail; 
     $yymain =~ s/{yabb tmprealname}/$tmprealname/sm;
   if ($birthday_on_reg) {     $yymain =~ s/{yabb aedomains}/$aedomains/sm; 
       &timetostring($date);  
       if ($timeselected =~ /[145]/) {    if ( $allow_hide_email == 1 ) {
           $yymain .= qq~        $yymain .= qq~
   <tr>             <br /><input type="checkbox" name="hideemail" id="hideemail" value="1"$hidechecked /> <label for="hideemail">$register_txt{'721'}</label> 
       <td class="windowbg" align="right" valign="top">         ~; 
           <label for="birth_month"><b>$register_txt{'birthday'}:</b></label>     } 
       </td>     $yymain .= $myregister_endrow; 
       <td class="windowbg2" align="left" valign="top"><input type="text" name="birth_month" id="birth_month" size="2" value="$birthdate[1]" maxlength="2" onkeypress="jumpatnext('document.creator.birth_month','document.creator.birth_day',2)" /> <input type="text" name="birth_day" id="birth_day" size="2" value="$birthdate[0]" maxlength="2" onkeypress="jumpatnext('document.creator.birth_day','document.creator.birth_year',2)" /> <input type="text" name="birth_year" id="birth_year" size="4" value="$birthdate[2]" maxlength="4" />~ . ($birthday_on_reg == 2 ? ' *' : '') . qq~ <span class="small">$register_txt{'birthday_a'}</span>~;     $yymain .= $email2; 
   
       } else {    if ($birthday_on_reg) {
           $yymain .= qq~         my $editAgeTxt; 
   <tr>         if ( $editAgeLimit == 1 ) { 
       <td class="windowbg" align="right" valign="top">             $editAgeTxt = 
           <label for="birth_day"><b>$register_txt{'birthday'}:</b></label>               qq~<br /><span class="small">$register_txt{'birthday_c'}</span>~; 
       </td>         } 
       <td class="windowbg2" align="left" valign="top"><input type="text" name="birth_day" id="birth_day" size="2" value="$birthdate[0]" maxlength="2" onkeypress="jumpatnext('document.creator.birth_day','document.creator.birth_month',2)" /> <input type="text" name="birth_month" id="birth_month" size="2" value="$birthdate[1]" maxlength="2" onkeypress="jumpatnext('document.creator.birth_month','document.creator.birth_year',2)" /> <input type="text" name="birth_year" id="birth_year" size="4" value="$birthdate[2]" maxlength="4" />~ . ($birthday_on_reg == 2 ? ' *' : '') . qq~ <span class="small">$register_txt{'birthday_b'}</span>~;         timetostring($date); 
       }         if ( $timeselected =~ /[145]/xsm ) { 
             $yymain .=
       $yymain .= qq~                 $myregister_bdonreg 
       </td>               . ( $birthday_on_reg == 2 ? $myreg_req : q{} ) 
   </tr>~;               . qq~ <span class="small">$register_txt{'birthday_a'}</span>~; 
   }        }
         else {
   if ($gender_on_reg) {             $yymain .= 
       if ($gender_on_reg == 1) {                 $myregister_bdonreg_2 
           $gender_req = qq~<label for="gender"><b>$register_txt{'gender'}: </b></label>~;               . ( $birthday_on_reg == 2 ? $myreg_req : q{} ) 
       }               . qq~ <span class="small">$register_txt{'birthday_b'}</span>~; 
       else {         } 
           $gender_req = qq~* <label for="gender"><b>$register_txt{'gender'}: </b></label>~;         $yymain =~ s/{yabb editAgeTxt}/$editAgeTxt/sm; 
       }         $yymain =~ s/{yabb birthdate0}/$birthdate[0]/sm; 
       $yymain .= qq~         $yymain =~ s/{yabb birthdate1}/$birthdate[1]/sm; 
       <tr>         $yymain =~ s/{yabb birthdate2}/$birthdate[2]/sm; 
           <td class="windowbg" align="right" valign="top">  
               $gender_req         $yymain .= $myregister_endrow; 
           </td>     } 
           <td class="windowbg2" align="left" valign="top">  
               <select name="gender" id="gender" size="1">     if ( $gender_on_reg ) { 
                   <option value=""></option>         my $editGenderTxt; 
                   <option value="Male">$register_txt{'gender_male'}</option>         my $nongen_opt = q{}; 
                   <option value="Female">$register_txt{'gender_female'}</option>         if ( $editGenderLimit == 1 ) { 
               </select>             $editGenderTxt = 
           </td>               qq~<br /><span class="small">$register_txt{'gender_edit'}</span>~; 
       </tr>         } 
       ~;         if ( $gender_on_reg == 2 ) { 
   }             $nongen_opt = $myreg_req; 
   unless ($emailpassword) {         } 
       $yymain .= qq~  
   <tr>         $yymain .= $myregister_gender; 
       <td class="windowbg" align="right" valign="top">         $yymain =~ s/{yabb editGenderTxt}/$editGenderTxt/sm; 
           <label for="passwrd1"><b>$register_txt{'81'}:</b></label>         $yymain =~ s/{yabb nongen_opt}/$nongen_opt/sm; 
       </td>     } 
       <td class="windowbg2" align="left" valign="top">     if ( !$emailpassword ) { 
           <script language="JavaScript1.2" type="text/javascript">         $yymain .= password_check(); 
           <!--     } 
               // Password_strength_meter start  
               var verdects = new Array("$pwstrengthmeter_txt{'1'}","$pwstrengthmeter_txt{'2'}","$pwstrengthmeter_txt{'3'}","$pwstrengthmeter_txt{'4'}","$pwstrengthmeter_txt{'5'}","$pwstrengthmeter_txt{'6'}","$pwstrengthmeter_txt{'7'}","$pwstrengthmeter_txt{'8'}");     if ( $addmemgroup_enabled == 1 || $addmemgroup_enabled == 3 ) { 
               var colors = new Array("#8F8F8F","#BF0000","#FF0000","#00A0FF","#33EE00","#339900");         my ( $addmemgroup, $selsize ); 
               var scores = new Array($pwstrengthmeter_scores);         foreach (@nopostorder) { 
               var common = new Array($pwstrengthmeter_common);             my ( 
               var minchar = $pwstrengthmeter_minchar;                 $title, undef, undef, undef, undef, undef, 
                 undef,  undef, undef, undef, $additional
               function runPassword(D) {             ) = split /\|/xsm, $NoPost{$_}; 
                   var nPerc = checkPassword(D);             if ($additional) { 
                   if (nPerc > -199 && nPerc < 0) {                 $addmemgroup .= qq~<option value="$_">$title</option>~; 
                       strColor = colors[0];                 $selsize++; 
                       strText = verdects[1];             } 
                       strWidth = "5%";         } 
                   } else if (nPerc == -200) {         $selsize = $selsize > 6 ? 6 : $selsize; 
                       strColor = colors[1];         my $additional_explain = 
                       strText = verdects[0];             $addmemgroup_enabled == 1 
                       strWidth = "0%";           ? $register_txt{'766'} 
                   } else if (scores[0] == -1 && scores[1] == -1 && scores[2] == -1 && scores[3] == -1) {           : $register_txt{'767'}; 
                       strColor = colors[4];         if ( $selsize > 1 ) { $additional_explain .= $register_txt{'767a'}; } 
                       strText = verdects[7];  
                       strWidth = "100%";         if ($addmemgroup) { 
                   } else if (nPerc <= scores[0]) {             $yymain .= $myregister_addmem; 
                       strColor = colors[1];             $yymain =~ s/{yabb additional_explain}/$additional_explain/sm; 
                       strText = verdects[2];             $yymain =~ s/{yabb selsize}/$selsize/sm; 
                       strWidth = "10%";             $yymain =~ s/{yabb addmemgroup}/$addmemgroup/sm; 
                   } else if (nPerc > scores[0] && nPerc <= scores[1]) {         } 
                       strColor = colors[2];     } 
                       strText = verdects[3];  
                       strWidth = "25%";     if ( $regtype == 1 ) { 
                   } else if (nPerc > scores[1] && nPerc <= scores[2]) {         $yymain .= 
                       strColor = colors[3];             $myregister_regreason_a 
                       strText = verdects[4];           . qq~            <textarea cols="60" rows="7" name="reason" id="reason">$reason</textarea>~ 
                       strWidth = "50%";           . $myregister_regreason_c 
                   } else if (nPerc > scores[2] && nPerc <= scores[3]) {           . length($RegReasonSymbols) 
                       strColor = colors[4];           . $myregister_regreason_b; 
                       strText = verdects[5];         $yymain =~ s/{yabb reason}/$reason/sm; 
                       strWidth = "75%";         $yymain =~ s/{yabb RegReasonSymbols}/$RegReasonSymbols/gsm; 
                   } else {     } 
                       strColor = colors[5];  
                       strText = verdects[6];     if ($extendedprofiles) { 
                       strWidth = "100%";         require Sources::ExtendedProfiles; 
                   }         my $reg_ext_prof = ext_register(); 
                   document.getElementById("passwrd1_bar").style.width = strWidth;         $yymain .= $reg_ext_prof; 
                   document.getElementById("passwrd1_bar").style.backgroundColor = strColor;     } 
                   document.getElementById("passwrd1_text").style.color = strColor;  
                   document.getElementById("passwrd1_text").childNodes[0].nodeValue = strText;     if ($regcheck) { 
               }         require Sources::Decoder; 
         validation_code();
               function checkPassword(C) {         $yymain .= $myregister_regcheck; 
                   if (C.length == 0 || C.length < minchar) return -100;         $yymain =~ s/{yabb flood_text}/$flood_text/sm; 
         $yymain =~ s/{yabb showcheck}/$showcheck/sm;
                   for (var D = 0; D < common.length; D++) {     } 
                       if (C.toLowerCase() == common[D]) return -200;     if ( $en_spam_questions && -e "$langdir/$language/spam.questions" ) { 
                   }         SpamQuestion(); 
         my $verification_question_desc;
                   var F = 0;         if ($spam_questions_case) { 
                   if (C.length >= minchar && C.length <= (minchar+2)) {             $verification_question_desc = 
                       F = (F + 6)               qq~<br />$register_txt{'verification_question_case'}~; 
                   } else if (C.length >= (minchar + 3) && C.length <= (minchar + 4)) {         } 
                       F = (F + 12)         $yymain .= $myregister_spamquest; 
                   } else if (C.length >= (minchar + 5)) {  
                       F = (F + 18)         $yymain =~ s/{yabb spam_question}/$spam_question/sm; 
                   }         $yymain =~ 
           s/{yabb verification_question_desc}/$verification_question_desc/sm;
                   if (C.match(/[a-z]/)) {         $yymain =~ s/{yabb spam_question_id}/$spam_question_id/sm; 
                       F = (F + 1)         $yymain =~ s/{yabb spam_question_image}/$spam_image/sm; 
                   }    }
                   if (C.match(/[A-Z]/)) {    if ( $honeypot == 1 ) {
                       F = (F + 5)         fopen( HONEY, "<$langdir/$language/honey.txt" ) 
                   }           or fatal_error( 'cannot_open', "$langdir/$language/honey.txt", 1 ); 
                   if (C.match(/d+/)) {         @honey = <HONEY>; 
                       F = (F + 5)         fclose(HONEY); 
                   }         chomp @honey; 
                   if (C.match(/(.*[0-9].*[0-9].*[0-9])/)) {         $hony      = int rand $#honey; 
                       F = (F + 7)         $newfieldb = $honey[$hony]; 
                   }  
                   if (C.match(/.[!,\@,#,\$,\%,^,&,*,?,_,\~]/)) {         $yymain .= $myregister_honey; 
                       F = (F + 5)         $yymain =~ s/{yabb newfieldb}/$newfieldb/sm; 
                   }         $yymain =~ s/{yabb newfield}/$newfield/sm; 
                   if (C.match(/(.*[!,\@,#,\$,\%,^,&,*,?,_,\~].*[!,\@,#,\$,\%,^,&,*,?,_,\~])/)) {     } 
                       F = (F + 7)  
                   }     # SpamFruits courtesy of Carsten Dalgaard # 
                   if (C.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)){     if ( $spamfruits == 1 ) { 
                       F = (F + 2)         my @fruits = 
                   }           ( $fruittxt{'2'}, $fruittxt{'3'}, $fruittxt{'4'}, $fruittxt{'5'} ); 
                   if (C.match(/([a-zA-Z])/) && C.match(/([0-9])/)) {         my $rdn = int rand 4; 
                       F = (F + 3)         $fruit = $fruits[$rdn]; 
                   }         $yymain .= $myregister_fruits; 
                   if (C.match(/([a-zA-Z0-9].*[!,\@,#,\$,\%,^,&,*,?,_,\~])|([!,\@,#,\$,\%,^,&,*,?,_,\~].*[a-zA-Z0-9])/)) {         $yymain =~ s/{yabb fruit}/$fruit/gsm; 
                       F = (F + 3)  
                   }  
                   return F;  
               }  
               // Password_strength_meter end  
           // -->  
           </script>  
           <div style="float:left;"><input type="password" maxlength="30" name="passwrd1" id="passwrd1" value="$tmpregpasswrd1" size="30" onkeypress="capsLock(event,'cappasswrd1')" onkeyup="runPassword(this.value);" /> *&nbsp;</div>  
           <div style="float:left; width: 150px; height: 20px; text-align:left;">  
               <div id="password-strength-meter" style="background: transparent url($imagesdir/empty_bar.gif) repeat-x center left; height: 4px"></div>  
               <div class="pstrength-bar" id="passwrd1_bar" style="border: 1px solid #FFFFFF; height: 4px"></div>  
               <div class="pstrength-info" id="passwrd1_text">&nbsp;</div>  
           </div>  
           <div style="clear:left; color: red; font-weight: bold; display: none" id="cappasswrd1">$register_txt{'capslock'}</div>  
           <div style="clear:left; color: red; font-weight: bold; display: none" id="cappasswrd1_char">$register_txt{'wrong_char'}: <span id="cappasswrd1_character">&nbsp;</span></div>  
       </td>  
   </tr>  
   <tr>  
       <td class="windowbg" align="right" valign="top">  
           <label for="passwrd2"><b>$register_txt{'82'}:</b></label>  
       </td>  
       <td class="windowbg2" align="left" valign="top">  
           <input type="password" maxlength="30" name="passwrd2" id="passwrd2" value="$tmpregpasswrd2" size="30" onkeypress="capsLock(event,'cappasswrd2')" /> *  
           <div style="color: red; font-weight: bold; display: none" id="cappasswrd2">$register_txt{'capslock'}</div>  
           <div style="color: red; font-weight: bold; display: none" id="cappasswrd2_char">$register_txt{'wrong_char'}: <span id="cappasswrd2_character">&nbsp;</span></div>  
       </td>  
   </tr>~;  
   }  
   
   if ($addmemgroup_enabled == 1 || $addmemgroup_enabled == 3) {  
       my ($title, $additional, $addmemgroup, $selsize);  
       foreach (@nopostorder) {  
           ($title, undef, undef, undef, undef, undef, undef, undef, undef, undef, $additional) = split(/\|/, $NoPost{$_});  
           if ($additional) {  
               $addmemgroup .= qq~<option value="$_">$title</option>~;  
               $selsize++;  
           }  
       }  
       $selsize = $selsize > 6 ? 6 : $selsize;  
       my $additional_explain = $addmemgroup_enabled == 1 ? $register_txt{'766'} : $register_txt{'767'};  
       $additional_explain .= $register_txt{'767a'} if $selsize > 1;  
   
       $yymain .= qq~  
   <tr>  
       <td class="windowbg" align="right" valign="top">  
           <label for="joinmemgroup"><b>$register_txt{'765'}:</b>  
           <br /><span class="small">$additional_explain</span></label>  
       </td>  
       <td class="windowbg2" align="left" valign="top">  
           <select name="joinmemgroup" id="joinmemgroup" size="$selsize" multiple="multiple">  
           $addmemgroup  
           </select>  
       </td>  
   </tr>~ if $addmemgroup;  
   }  
   
   if ($regtype == 1) {  
       $yymain .= qq~  
   <tr>  
       <td class="windowbg" align="right" valign="top">  
           <label for="reason"><b>$prereg_txt{'regreason'}:</b><br />  
           <span class="small">$prereg_txt{'reason_exp'}</span></label><br /><br />  
       </td>  
       <td class="windowbg2" align="left" valign="top">  
           <textarea cols="60" rows="7" name="reason" id="reason">$reason</textarea> *<br />  
           <span class="small">$prereg_txt{'16'} <input value="$RegReasonSymbols" size="~ . length($RegReasonSymbols) . qq~" name="msgCL" class="windowbg" style="border: 0px; padding: 1px; font-size: 11px;" readonly="readonly" /></span>  
           <script type="text/javascript" language="JavaScript">  
           <!--  
           var supportsKeys = false;  
           function tick() {  
               calcCharLeft(document.forms[0]);  
               if (!supportsKeys) { timerID = setTimeout("tick()",$RegReasonSymbols); }  
           }  
           function calcCharLeft(sig) {  
               clipped = false;  
               maxLength = $RegReasonSymbols;  
               if (document.creator.reason.value.length > maxLength) {  
                   document.creator.reason.value = document.creator.reason.value.substring(0,maxLength);  
                   charleft = 0;  
                   clipped = true;  
               } else {  
                   charleft = maxLength - document.creator.reason.value.length;  
               }  
               document.creator.msgCL.value = charleft;  
               return clipped;  
           }  
           tick();  
           //-->  
           </script>  
       </td>  
   </tr>~;  
   }  
   
   if ($extendedprofiles) {  
       require "$sourcedir/ExtendedProfiles.pl";  
       my $reg_ext_prof = &ext_register;  
       $reg_ext_prof =~ s/align="left" valign="top"/align="right" valign="top"/g;  
       $reg_ext_prof =~ s/<\/td><td align="left">/<\/td><td class="windowbg2" align="left">/g;  
       $yymain .= $reg_ext_prof;  
   }  
   
   if ($regcheck) {  
       require "$sourcedir/Decoder.pl";  
       &validation_code;  
   
       $yymain .= qq~  
   <tr>  
       <td class="windowbg" align="right" valign="top">  
           <label for="verification"><b>$floodtxt{'1'}:</b><br />  
           <span class="small">$floodtxt{'casewarning'}</span></label>  
       </td>  
       <td class="windowbg2" align="left" valign="middle">  
           $showcheck  
       </td>  
   </tr>  
   <tr>  
       <td class="windowbg" align="right" valign="top">  
           <label for="verification"><b>$floodtxt{'3'}:</b></label>  
       </td>  
       <td class="windowbg2" align="left" valign="top">  
           <input type="text" maxlength="30" name="verification" id="verification" size="30" /> *  
       </td>  
   </tr>~;  
   }  
   if ($en_spam_questions) {  
       srand;  
       fopen(SPAMQUESTIONS, "<$langdir/$language/spam.questions") || &fatal_error("cannot_open","$langdir/$language/spam.questions", 1);  
       rand($.) < 1 && ($spam_question_rand = $_) while <SPAMQUESTIONS>;  
       fclose(SPAMQUESTIONS);  
       ($spam_question_id, $spam_question, undef) = split(/\|/, $spam_question_rand);  
       if ($spam_questions_case) { $verification_question_desc = qq~<br />$register_txt{'verification_question_case'}~; }  
       $yymain .= qq~        $yymain .= qq~
   <tr>                 <script type="text/javascript"> 
       <td class="windowbg" align="right" valign="top">                     function ShowFruits() { 
           <label for="verification_question"><b>$spam_question</b><br />                         var visfruits = "<html><head><link rel='stylesheet' href='$extpagstyle' type='text/css' /></head><body class='windowbg2'> "; 
           <span class="small">$register_txt{'verification_question_desc'}$verification_question_desc</span></label>                         visfruits += "<img src='$defaultimagesdir/fruits.png' width='290' height='75' name='fruitsview' id='fruitsview' style='position: absolute; top: 0px; left: 0px; cursor: pointer;' alt='' onclick='FruitClick(event)' /> "; 
       </td>                         visfruits += "<img src='$defaultimagesdir/fruitcheck.png' id='frmarker' style='z-index: 2; display: none;'> "; 
       <td class="windowbg2" align="left" valign="top">                         visfruits += "<script type='text/javascript'> " 
           <input type="text" name="verification_question" id="verification_question" size="30" /> *                         visfruits += "var xcor = 0; " 
           <input type="hidden" name="verification_question_id" value="$spam_question_id" />                         visfruits += "var ycor = 0; " 
       </td>                         visfruits += "var mrkpos = 30; " 
   </tr>~;                         visfruits += "function FruitClick(event) \{ " 
   }                         visfruits += "xcor = (event.clientX); " 
   if ($honeypot == 1) {                         visfruits += "ycor = (event.clientY); " 
           fopen(HONEY, "<$langdir/$language/honey.txt") || &fatal_error("cannot_open","$langdir/$language/honey.txt", 1);                         visfruits += "if(xcor > 0) mrkpos = 30; " 
           @honey = <HONEY>;                         visfruits += "if(xcor > 75) mrkpos = 100; " 
           fclose(HONEY);                         visfruits += "if(xcor > 145) mrkpos = 170; " 
           chomp @honey;                         visfruits += "if(xcor > 215) mrkpos = 240; " 
         $hony = int rand $#honey;                         visfruits += "document.getElementById('frmarker').style.display = 'block'; " 
       $newfieldb = $honey[$hony];                         visfruits += "document.getElementById('frmarker').style.position = 'absolute'; " 
                         visfruits += "document.getElementById('frmarker').style.left = mrkpos + 'px'; " 
       $yymain .= qq~                         visfruits += "document.getElementById('frmarker').style.top = '67px'; " 
       <tr class="green">                         visfruits += "parent.document.creator.ycord.value = ycor; " 
           <td align="right" valign="top" class="green">                         visfruits += "parent.document.creator.xcord.value = xcor; " 
               <label for="add_field0" class="green"><b>$newfieldb</b>                         visfruits += "\} " 
           </td>                         visfruits += "<\\/script> <\\/body> <\\/html>"; 
           <td align="left" valign="top" class="green">                         fruits.document.open("text/html"); 
               <input type="text" name="add_field0" id="add_field0" size="30" value="$newfield" maxlength="18" class="green" /> *                         fruits.document.write(visfruits); 
           </td>                         fruits.document.close(); 
       </tr>~;    }                    }
                            ShowFruits() 
   # SpamFruits courtesy of Carsten Dalgaard #                 </script>~; 
   if ($spamfruits == 1) {             $yymain .= $myregister_endrow; 
       my @fruits = ($fruittxt{'2'},$fruittxt{'3'},$fruittxt{'4'},$fruittxt{'5'});     } 
       my $rdn = int(rand(4));  
       $fruit = $fruits[$rdn];     if ( $RegAgree == 2 ) { 
       $yymain .= qq~         if ($language) { 
       <tr>             fopen( AGREE, "$langdir/$language/agreement.txt" ); 
           <td class="windowbg" align="right" valign="top">         } 
               <b>$fruittxt{'1'} $fruit:</b>         else { 
           </td>             fopen( AGREE, "$langdir/$lang/agreement.txt" ); 
           <td class="windowbg2" align="left" valign="middle">         } 
               <input type="hidden" name="xcord" id="xcord" value="0" />         @agreement = <AGREE>; 
               <input type="hidden" name="ycord" id="ycord" value="0" />         fclose(AGREE); 
               <input type="hidden" name="thefruit" id="thefruit" value="$fruit" />         $fullagree = join q{}, @agreement; 
               <iframe id="fruits" name="fruits" width="290" height="87" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>         $fullagree =~ s/\n/<br \/>/gsm; 
               <script language="JavaScript1.2" type="text/javascript">         $yymain .= $myregister_regagree; 
               <!--         $yymain =~ s/{yabb fullagree}/$fullagree/gsm; 
                   function ShowFruits() {  
                       var visfruits = "<html><head><link rel='stylesheet' href='$extpagstyle' type='text/css' /></head><body class='windowbg2'> ";     } 
                       visfruits += "<img src='$defaultimagesdir/fruits.png' width='290' height='75' name='fruitsview' id='fruitsview' border='0' style='position: absolute; top: 0px; left: 0px; cursor: pointer;' alt='' onclick='FruitClick(event)' /> ";     $yymain .= $myregister_endform; 
                       visfruits += "<img src='$defaultimagesdir/fruitcheck.png' id='frmarker' style='z-index: 2; display: none;'> ";     $yymain .= qq~ 
                       visfruits += "<script language='JavaScript1.2' type='text/javascript'> "  <script type="text/javascript"> 
                       visfruits += "var xcor = 0; "     document.creator.regusername.focus(); 
                       visfruits += "var ycor = 0; "   
                       visfruits += "var mrkpos = 30; "     function CheckRegFields() { 
                       visfruits += "function FruitClick(event) \{ "         if (document.creator.regusername.value === '') { 
                       visfruits += "xcor = (event.clientX); "             alert("$register_txt{'error_username'}"); 
                       visfruits += "ycor = (event.clientY); "             document.creator.regusername.focus(); 
                       visfruits += "if(xcor > 0) mrkpos = 30; "             return false; 
                       visfruits += "if(xcor > 75) mrkpos = 100; "         }~; 
                       visfruits += "if(xcor > 145) mrkpos = 170; "         if ( !$emailpassword ) { 
                       visfruits += "if(xcor > 215) mrkpos = 240; "             $yymain .= qq~ 
                       visfruits += "document.getElementById('frmarker').style.display = 'block'; "         if (document.creator.regusername.value == document.creator.passwrd1.value || document.creator.regrealname.value == document.creator.passwrd1.value) { 
                       visfruits += "document.getElementById('frmarker').style.position = 'absolute'; "             alert("$register_txt{'error_usernameispass'}"); 
                       visfruits += "document.getElementById('frmarker').style.left = mrkpos + 'px'; "             document.creator.regusername.focus(); 
                       visfruits += "document.getElementById('frmarker').style.top = '67px'; "             return false; 
                       visfruits += "parent.document.creator.ycord.value = ycor; "         }~; 
                       visfruits += "parent.document.creator.xcord.value = xcor; "         } 
                       visfruits += "\} "     $yymain .= qq~ 
                       visfruits += "<\\/script> <\\/body> <\\/html>";         if (document.creator.regrealname.value === '') { 
                       fruits.document.open("text/html");             alert("$register_txt{'error_realname'}"); 
                       fruits.document.write(visfruits);             document.creator.regrealname.focus(); 
                       fruits.document.close();             return false; 
                   }         }~ . 
                   ShowFruits()  
               //-->       ( 
               </script>         $name_cannot_be_userid 
           </td>         ? qq~ 
       </tr>         if (document.creator.regusername.value == document.creator.regrealname.value) { 
       ~;             alert("$register_txt{'error_name_cannot_be_userid'}"); 
   }             document.creator.regrealname.focus(); 
             return false;
   if ($RegAgree) {         }~ 
       if ($language) {         : q{} 
           fopen(AGREE, "$langdir/$language/agreement.txt");       ) 
       } else {  
           fopen(AGREE, "$langdir/$lang/agreement.txt");       . qq~ 
       }         if (document.creator.email.value === '') { 
       @agreement = <AGREE>;             alert("$register_txt{'error_email'}"); 
       fclose(AGREE);             document.creator.email.focus(); 
       $fullagree = join("", @agreement);             return false; 
       $fullagree =~ s/\n/<br \/>/g;         }~ . 
       $yymain .= qq~  
   <tr>       ( 
       <td colspan="2" class="titlebg">           $imp_email_check ? qq~ 
           <img src="$imagesdir/xx.gif" alt="$register_txt{'764a'}" title="$register_txt{'764a'}" border="0" /> <b>$register_txt{'764a'}</b>         if (document.creator.email2.value === '') { 
       </td>             alert("$register_txt{'error_email2'}"); 
   </tr>             document.creator.email2.focus(); 
   <tr>             return false; 
       <td colspan="2" class="windowbg">         } 
           <label for="regagree"><span style="float: left; padding: 5px;">$fullagree</span></label>         if (document.creator.email.value != document.creator.email2.value) { 
       </td>             alert("$register_txt{'error_email3'}"); 
   </tr>             document.creator.email.focus(); 
   <tr>             return false; 
       <td colspan="2" class="windowbg2" align="center">         }~ : q{} 
           <label for="regagree"><b>$register_txt{'585'}</b></label> <input type="radio" name="regagree" id="regagree" value="yes" /> * &nbsp;&nbsp; <label for="regnoagree"><b>$register_txt{'586'}</b></label> <input type="radio" name="regagree" id="regnoagree" value="no" />       ) . 
       </td>  
   </tr>~;       ( 
   }         $birthday_on_reg 
   $yymain .= qq~         ? q~ 
   <tr>         if (~ 
       <td colspan="2" align="center" class="titlebg">           . ( 
           <br />             $birthday_on_reg == 1 
           <label for="submitbutton">$register_txt{'95'}</label><br />             ? 'document.creator.birth_day.value.length && ' 
           <br />             : q{} 
           <input type="submit" id="submitbutton" value="$register_txt{'97'}" class="button" /><br /><br />           ) 
       </td>           . qq~(document.creator.birth_day.value.length < 2 || document.creator.birth_day.value < 1 || document.creator.birth_day.value > 31 || (/\\D/.test)(document.creator.birth_day.value))) { 
   </tr>             alert("$register_txt{'error_birth_day'}"); 
</table>             document.creator.birth_day.focus(); 
</form>             return false; 
         }
<script type="text/javascript" language="JavaScript">         if (~ 
<!--           . ( 
   document.creator.regusername.focus();             $birthday_on_reg == 1 
             ? 'document.creator.birth_month.value.length && ' 
   function CheckRegFields() {             : q{} 
       if (document.creator.regusername.value == '') {           ) 
           alert("$register_txt{'error_username'}");           . qq~(document.creator.birth_month.value.length < 2 || document.creator.birth_month.value < 1 || document.creator.birth_month.value > 12 || (/\\D/.test)(document.creator.birth_month.value))) { 
           document.creator.regusername.focus();             alert("$register_txt{'error_birth_month'}"); 
           return false;             document.creator.birth_month.focus(); 
       }             return false; 
       if (document.creator.regusername.value == document.creator.passwrd1.value || document.creator.regrealname.value == document.creator.passwrd1.value) {         } 
           alert("$register_txt{'error_usernameispass'}");         if (~ 
           document.creator.regusername.focus();           . ( 
           return false;             $birthday_on_reg == 1 
       }             ? 'document.creator.birth_year.value.length && ' 
       if (document.creator.regrealname.value == '') {             : q{} 
           alert("$register_txt{'error_realname'}");           ) 
           document.creator.regrealname.focus();           . qq~(document.creator.birth_year.value.length < 4 || (/\\D/.test)(document.creator.birth_year.value))) { 
           return false;             alert("$register_txt{'error_birth_year'}"); 
       }~ .             document.creator.birth_year.focus(); 
             return false;
       ($name_cannot_be_userid ? qq~         } 
       if (document.creator.regusername.value == document.creator.regrealname.value) {         if (~ 
           alert("$register_txt{'error_name_cannot_be_userid'}");           . ( 
           document.creator.regrealname.focus();             $birthday_on_reg == 1 
           return false;             ? 'document.creator.birth_year.value.length && ' 
       }~ : '')             : q{} 
           )
       . qq~           . qq~(document.creator.birth_year.value < ($year - 120) || document.creator.birth_year.value > $year)) { 
       if (document.creator.email.value == '') {             alert("$register_txt{'error_birth_year_real'}"); 
           alert("$register_txt{'error_email'}");             document.creator.birth_year.focus(); 
           document.creator.email.focus();             return false; 
           return false;         }~ 
       }~ .         : q{} 
       )
       ($birthday_on_reg ? qq~  
       if (~ . ($birthday_on_reg == 1 ? 'document.creator.birth_day.value.length && ' : '') . qq~(document.creator.birth_day.value.length < 2 || document.creator.birth_day.value < 1 || document.creator.birth_day.value > 31 || /\\D/.test(document.creator.birth_day.value))) {       . qq~ 
           alert("$register_txt{'error_birth_day'}");         var emailpassword = $emailpassword; 
           document.creator.birth_day.focus();         if (emailpassword === 0) { 
           return false;             if (document.creator.passwrd1.value === '' || document.creator.passwrd2.value === '') { 
       }                 alert("$register_txt{'error_pass1'}"); 
       if (~ . ($birthday_on_reg == 1 ? 'document.creator.birth_month.value.length && ' : '') . qq~(document.creator.birth_month.value.length < 2 || document.creator.birth_month.value < 1 || document.creator.birth_month.value > 12 || /\\D/.test(document.creator.birth_month.value))) {                 document.creator.passwrd1.focus(); 
           alert("$register_txt{'error_birth_month'}");                 return false; 
           document.creator.birth_month.focus();             } 
           return false;             if (document.creator.passwrd1.value != document.creator.passwrd2.value) { 
       }                 alert("$register_txt{'error_pass2'}"); 
       if (~ . ($birthday_on_reg == 1 ? 'document.creator.birth_year.value.length && ' : '') . qq~(document.creator.birth_year.value.length < 4 || /\\D/.test(document.creator.birth_year.value))) {                 document.creator.passwrd1.focus(); 
           alert("$register_txt{'error_birth_year'}");                 return false; 
           document.creator.birth_year.focus();             } 
           return false;         } 
       }         var regcheck = $regcheck; 
       if (~ . ($birthday_on_reg == 1 ? 'document.creator.birth_year.value.length && ' : '') . qq~(document.creator.birth_year.value < ($year - 120) || document.creator.birth_year.value > $year)) {        if (regcheck > 0 && document.creator.verification.value === '') {
           alert("$register_txt{'error_birth_year_real'}");             alert("$register_txt{'error_verification'}"); 
           document.creator.birth_year.focus();             document.creator.verification.focus(); 
           return false;            return false;
       }~ : '')         }~ . 
   
       . qq~       ( 
       if ($emailpassword == 0) {         $en_spam_questions && -e "$langdir/$language/spam.questions" 
           if (document.creator.passwrd1.value == '' || document.creator.passwrd2.value == '') {         ? qq~ 
               alert("$register_txt{'error_pass1'}");         if (document.creator.verification_question.value === '') { 
               document.creator.passwrd1.focus();             alert("$register_txt{'error_verification_question'}"); 
               return false;             document.creator.verification_question.focus(); 
           }             return false; 
           if (document.creator.passwrd1.value != document.creator.passwrd2.value) {         }~ 
               alert("$register_txt{'error_pass2'}");         : q{} 
               document.creator.passwrd1.focus();       ) 
               return false;  
           }       . qq~ 
       }         var regtype = $regtype; 
       if ($regcheck > 0 && document.creator.verification.value == '') {         var RegAgree = $RegAgree; 
           alert("$register_txt{'error_verification'}");         var gender_on_reg = $gender_on_reg; 
           document.creator.verification.focus();         if (regtype == 1 && document.creator.reason.value === '') { 
           return false;             alert("$register_txt{'error_reason'}"); 
       }~ .             document.creator.reason.focus(); 
             return false;
       ($en_spam_questions ? qq~         } 
       if (document.creator.verification_question.value == '') {        if (RegAgree == 2 && document.creator.regagree[0].checked !== true) {
           alert("$register_txt{'error_verification_question'}");             alert("$register_txt{'error_agree'}"); 
           document.creator.verification_question.focus();             return false; 
           return false;         } 
       }~ : '')  
         if (gender_on_reg > 1 && !document.creator.gender.value) {
       . qq~             alert("$register_txt{'error_gender'}"); 
       if ($regtype == 1 && document.creator.reason.value == '') {             document.creator.gender.focus(); 
           alert("$register_txt{'error_reason'}");             return false; 
           document.creator.reason.focus();         } 
           return false;         return true; 
       }    }
       if ($RegAgree > 0 && document.creator.regagree[0].checked != true) {  
           alert("$register_txt{'error_agree'}");     function jumpatnext(from,to,length) { 
           return false;         window.setTimeout('if (' + from + '.value.length == ' + length + ') ' + to + '.focus();', 1); 
       }    }
   
       if ($gender_on_reg > 1 && !document.creator.gender.value) {  
           alert("$register_txt{'error_gender'}");  
           document.creator.gender.focus();  
           return false  
       }  
       return true;  
   }  
   
   function jumpatnext(from,to,length) {  
       window.setTimeout('if (' + from + '.value.length == ' + length + ') ' + to + '.focus();', 1);  
   }  
//-->  
</script> </script>
   ~;    ~;
   &template;     template(); 
     return;
} }
   
sub Register2 { sub Register2 {
   if (!$regtype) { &fatal_error("registration_disabled"); }    if ( !$regtype ) { fatal_error('registration_disabled'); }
   if ($RegAgree && $FORM{'regagree'} ne 'yes') { &fatal_error('no_regagree'); }     if ( $RegAgree > 0 && $FORM{'regagree'} ne 'yes' ) { 
   my %member;         fatal_error('no_regagree'); 
   while (($key, $value) = each(%FORM)) {     } 
       $value =~ s~\A\s+~~;     my %member; 
       $value =~ s~\s+\Z~~;     while ( ( $key, $value ) = each %FORM ) { 
       unless ($key eq "reason") {$value =~ s~[\n\r]~~g;}         $value =~ s/\A\s+//xsm; 
       $member{$key} = $value;         $value =~ s/\s+\Z//xsm; 
   }        if ( $key ne 'reason' ) { $value =~ s/[\n\r]//gxsm; }
   if ($member{'domain'}) { $member{'email'} .= $member{'domain'}; }         $member{$key} = $value; 
   $member{'regusername'} =~ s/\s/_/g;     } 
   $member{'regrealname'} =~ s~\t+~\ ~g;     if ( $member{'domain'} ) { $member{'email'} .= $member{'domain'}; } 
  #    $member{'regusername'} =~ s/\s/_/gxsm;
   # Make sure users can't register with banned details     $member{'regrealname'} =~ s/\t+/\ /gsm; 
   &email_domain_check($member{'email'});  
   &banning($member{'regusername'}, $member{'email'});     # If enabled check if user has a valid e-mail address (needs Net::DNS to be installed) 
     if ( $imp_email_check == 1 ) {
   # check if there is a system hash named like this by checking existence through size         eval { 
   &fatal_error("system_prohibited_id", "($member{'regusername'})") if keys(%{ $member{'regusername'} }) > 0;             require Net::DNS; 
   &fatal_error("id_to_long","($member{'regusername'})") if length($member{'regusername'}) > 25;         }; 
   &fatal_error("email_to_long","($member{'email'})") if length($member{'email'}) > 100;         if ( !$EVAL_ERROR ) { 
   &fatal_error("no_username","($member{'regusername'})") if $member{'regusername'} eq '';             my $helo; 
   &fatal_error("id_alfa_only","($member{'regusername'})") if $member{'regusername'} eq '_';             require Mail::CheckUser; 
   &fatal_error("id_reserved","$member{'regusername'}") if $member{'regusername'} =~ /guest/i;             Mail::CheckUser->import(qw(check_email last_check)); 
   &fatal_error("invalid_character","$register_txt{'35'} $register_txt{'241re'}") if $member{'regusername'} =~ /[^\w\+\-\.\@]/;             $Mail::CheckUser::Sender_Addr = $webmaster_email; 
   &fatal_error("no_email","($member{'regusername'})") if $member{'email'} eq "";             if ($boardurl =~ /http\:\/\/(.*?)\//){ $Mail::CheckUser::Helo_Domain = $1; } 
   &fatal_error("id_taken","($member{'regusername'})") if -e ("$memberdir/$member{'regusername'}.vars");             if (check_email($member{'email'})) { 
   &fatal_error("password_is_userid") if $member{'regusername'} eq $member{'passwrd1'};                 my $email_ok = 1; 
   &fatal_error("no_reg_reason") if $member{'reason'} eq "" && $regtype == 1;             } 
             else {
   if ($spamfruits == 1) {                     my $failure = last_check()->{code}; 
       if($member{'ycord'} < 5 || $member{'ycord'} > 70) { &fatal_error("", "$fruittxt{'6'}"); }                 fatal_error(q{}, "$mail_check{'address'} $member{'email'} $mail_check{'invalid'} $mail_check{'reason'} $mail_check{$failure}"); 
       if($member{'thefruit'} eq $fruittxt{'2'} && ($member{'xcord'} < 5 || $member{'xcord'} > 75)) { &fatal_error("", "$fruittxt{'6'}"); }            }
       if($member{'thefruit'} eq $fruittxt{'3'} && ($member{'xcord'} < 75 || $member{'xcord'} > 145)) { &fatal_error("", "$fruittxt{'6'}"); }        }
       if($member{'thefruit'} eq $fruittxt{'4'} && ($member{'xcord'} < 145 || $member{'xcord'} > 215)) { &fatal_error("", "$fruittxt{'6'}"); }    }
       if($member{'thefruit'} eq $fruittxt{'5'} && ($member{'xcord'} < 215 || $member{'xcord'} > 285)) { &fatal_error("", "$fruittxt{'6'}"); }  
   }     # Make sure users can't register with banned details 
     email_domain_check( $member{'email'} );
   &FromChars($member{'regrealname'});     banning( $member{'regusername'}, $member{'email'} ); 
   $convertstr = $member{'regrealname'};  
   $convertcut = 30;  # check if there is a system hash named like this by checking existence through size 
   &CountChars;     if ( keys( %{ $member{'regusername'} } ) > 0 ) { 
     $member{'regrealname'} = $convertstr;         fatal_error( 'system_prohibited_id', "($member{'regusername'})" ); 
   &fatal_error("realname_to_long","($member{'regrealname'} => $convertstr)") if $cliped;     } 
   &fatal_error('invalid_character', "$register_txt{'38'} $register_txt{'241re'}") if $member{'regrealname'} =~ /[^ \w\x80-\xFF\[\]\(\)#\%\+,\-\|\.:=\?\@\^]/;     if ( length( $member{'regusername'} ) > 25 ) { 
         fatal_error( 'id_to_long', "($member{'regusername'})" );
   if ($name_cannot_be_userid && lc $member{'regusername'} eq lc $member{'regrealname'}) { &fatal_error('name_is_userid'); }    }
     if ( $member{'email'} ne $member{'email2'} && $imp_email_check ) {
   if (lc $member{'regusername'} eq lc &MemberIndex("check_exist", $member{'regusername'})) { &fatal_error("id_taken","($member{'regusername'})"); }         fatal_error( 'email_mismatch' ); 
   if (lc $member{'email'} eq lc &MemberIndex("check_exist", $member{'email'})) { &fatal_error("email_taken","($member{'email'})"); }    }
   if (lc $member{'regrealname'} eq lc &MemberIndex("check_exist", $member{'regrealname'})) { &fatal_error("name_taken"); }     if ( length( $member{'email'} ) > 100 ) { 
   if ( &CheckCensor($member{'regusername'}) ne "" ) { &fatal_error("censor1",&CheckCensor($member{'regusername'})); }         fatal_error( 'email_to_long', "($member{'email'})" ); 
   if ( &CheckCensor($member{'email'}) ne "" ) { &fatal_error("censor2",&CheckCensor($member{'email'})); }    }
   if ( &CheckCensor($member{'regrealname'}) ne "" ) { &fatal_error("censor3",&CheckCensor($member{'regrealname'})); }     if ( $member{'regusername'} eq q{} ) { 
   if ( $honeypot == 1 && $member{'add_field0'} ne q{}) {&fatal_error("bad_bot");}         fatal_error( 'no_username', "($member{'regusername'})" ); 
     }
   if ($regtype == 1) {    if ( $member{'regusername'} eq q{_} ) {
       $convertstr = $member{'reason'};         fatal_error( 'id_alfa_only', "($member{'regusername'})" ); 
       $convertcut = $RegReasonSymbols;     } 
       &CountChars;     if ( $member{'regusername'} =~ /guest/ixsm ) { 
       $member{'reason'} = $convertstr;         fatal_error( 'id_reserved', "$member{'regusername'}" ); 
     }
       &FromChars($member{'reason'});     if ( $member{'regusername'} =~ /[^\w\+\-\_\@\.]/sm ) { 
       &ToHTML($member{'reason'});         fatal_error( 'invalid_character', 
       &ToChars($member{'reason'});             "$register_txt{'35'} $register_txt{'241e'}" ); 
       $member{'reason'} =~ s~[\n\r]{1,2}~<br />~ig;     } 
   }     if ( $member{'regusername'} =~ /^[0-9]+$/sm ) { 
         fatal_error( 'all_numbers',
   if ($regcheck) { require "$sourcedir/Decoder.pl"; &validation_check($member{'verification'}); }             "$register_txt{'35'} $register_txt{'241n'}" ); 
   if ($en_spam_questions) {     } 
       fopen(SPAMQUESTIONS, "<$langdir/$language/spam.questions") || &fatal_error("cannot_open","$langdir/$language/spam.questions", 1);     if ( $member{'email'} eq q{} ) { 
       @spam_questions = <SPAMQUESTIONS>;         fatal_error( 'no_email', "($member{'regusername'})" ); 
       fclose(SPAMQUESTIONS);     } 
       foreach my $verification_question (@spam_questions) {    if ( -e ("$memberdir/$member{'regusername'}.vars") ) {
           chomp $verification_question;         fatal_error( 'id_taken', "($member{'regusername'})" ); 
           if ($verification_question =~ /$member{'verification_question_id'}/) {     } 
              (undef, undef, $verification_answer) = split(/\|/, $verification_question);     if ( $member{'regusername'} eq $member{'passwrd1'} ) { 
           }         fatal_error('password_is_userid'); 
       }    }
       $member{'verification_question'} =~ s/\A\s+//;     if ( $member{'reason'} eq q{} && $regtype == 1 ) { 
       $member{'verification_question'} =~ s/\s+\Z//;         fatal_error('no_reg_reason'); 
       unless ($spam_questions_case) {     } 
           $verification_answer = lc($verification_answer);  
           $member{'verification_question'} = lc($member{'verification_question'});     if ( $spamfruits == 1 ) { 
       }         if ( $member{'ycord'} < 5 || $member{'ycord'} > 70 ) { 
       &fatal_error("no_verification_question") if $member{'verification_question'} eq '';             fatal_error( q{}, "$fruittxt{'6'}" ); 
       @verificationanswer = split(/,/, $verification_answer);         } 
       foreach (@verificationanswer) {         if ( $member{'thefruit'} eq $fruittxt{'2'} 
           $_ =~ s/\A\s+//;             && ( $member{'xcord'} < 5 || $member{'xcord'} > 75 ) ) 
           $_ =~ s/\s+\Z//;         { 
       }             fatal_error( q{}, "$fruittxt{'6'}" ); 
       unless (grep { $member{'verification_question'} eq $_ } @verificationanswer) { &fatal_error("wrong_verification_question"); }         } 
   }         if ( $member{'thefruit'} eq $fruittxt{'3'} 
             && ( $member{'xcord'} < 75 || $member{'xcord'} > 145 ) )
   if ($emailpassword) {        {
       srand();             fatal_error( q{}, "$fruittxt{'6'}" ); 
       $member{'passwrd1'} = int(rand(100));         } 
       $member{'passwrd1'} =~ tr/0123456789/ymifxupbck/;         if ( $member{'thefruit'} eq $fruittxt{'4'} 
       $_ = int(rand(77));             && ( $member{'xcord'} < 145 || $member{'xcord'} > 215 ) ) 
       $_ =~ tr/0123456789/q8dv7w4jm3/;         { 
       $member{'passwrd1'} .= $_;             fatal_error( q{}, "$fruittxt{'6'}" ); 
       $_ = int(rand(89));         } 
       $_ =~ tr/0123456789/y6uivpkcxw/;         if ( $member{'thefruit'} eq $fruittxt{'5'} 
       $member{'passwrd1'} .= $_;             && ( $member{'xcord'} < 215 || $member{'xcord'} > 285 ) ) 
       $_ = int(rand(188));         { 
       $_ =~ tr/0123456789/poiuytrewq/;             fatal_error( q{}, "$fruittxt{'6'}" ); 
       $member{'passwrd1'} .= $_;         } 
       $_ = int(rand(65));     } 
       $_ =~ tr/0123456789/lkjhgfdaut/;  
       $member{'passwrd1'} .= $_;     FromChars( $member{'regrealname'} ); 
   } else {     $convertstr = $member{'regrealname'}; 
       &fatal_error("password_mismatch","($member{'regusername'})") if $member{'passwrd1'} ne $member{'passwrd2'};     $convertcut = 30; 
       &fatal_error("no_password","($member{'regusername'})") if $member{'passwrd1'} eq '';     CountChars(); 
       &fatal_error("invalid_character","$register_txt{'36'} $register_txt{'241'}") if $member{'passwrd1'} =~ /[^\s\w!\@#\$\%\^&\*\(\)\+\|`~\-=\\:;'",\.\/\?\[\]\{\}]/;     $member{'regrealname'} = $convertstr; 
   }     if ($cliped) { 
   &fatal_error("invalid_character","$register_txt{'69'} $register_txt{'241e'}") if $member{'email'} !~ /^[\w\-\.\+]+\@[\w\-\.\+]+\.\w{2,4}$/;         fatal_error( 'realname_to_long', 
   &fatal_error("invalid_email") if $member{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/ || $member{'email'} !~ /\A.+@\[?(\w|[-.])+\.[a-zA-Z]{2,4}|[0-9]{1,4}\]?\Z/;             "($member{'regrealname'} => $convertstr)" ); 
     }
   fopen(RESERVE, "$vardir/reserve.txt") || &fatal_error("cannot_open","$vardir/reserve.txt", 1);     if ( $member{'regrealname'} =~ 
   @reserve = <RESERVE>;         /[^ \w\x80-\xFF\[\]\(\)#\%\+,\-\|\.:=\?\@\^]/sm ) 
   fclose(RESERVE);     { 
   fopen(RESERVECFG, "$vardir/reservecfg.txt") || &fatal_error("cannot_open","$vardir/reservecfg.txt", 1);         fatal_error( 'invalid_character', 
   @reservecfg = <RESERVECFG>;             "$register_txt{'38'} $register_txt{'241re'}" ); 
   fclose(RESERVECFG);     } 
   for ($a = 0; $a < @reservecfg; $a++) {  
       chomp $reservecfg[$a];     if ( $name_cannot_be_userid 
   }         && lc $member{'regusername'} eq lc $member{'regrealname'} ) 
   $matchword = $reservecfg[0] eq 'checked';     { 
   $matchcase = $reservecfg[1] eq 'checked';         fatal_error('name_is_userid'); 
   $matchuser = $reservecfg[2] eq 'checked';     } 
   $matchname = $reservecfg[3] eq 'checked';  
   $namecheck = $matchcase eq 'checked' ? $member{'regusername'} : lc $member{'regusername'};     if ( 
   $realnamecheck = $matchcase eq 'checked' ? $member{'regrealname'} : lc $member{'regrealname'};         lc $member{'regusername'} eq 
         lc MemberIndex( 'check_exist', $member{'regusername'}, 0 ) )
   foreach $reserved (@reserve) {    {
       chomp $reserved;         fatal_error( 'id_taken', "($member{'regusername'})" ); 
       $reservecheck = $matchcase ? $reserved : lc $reserved;     } 
       if ($matchuser) {     if ( 
           if ($matchword) {         lc $member{'email'} eq lc MemberIndex( 'check_exist', $member{'email'}, 2 ) 
               if ($namecheck eq $reservecheck) { &fatal_error('id_reserved',"$reserved"); }       ) 
           } else {    {
               if ($namecheck =~ $reservecheck) { &fatal_error('id_reserved',"$reserved"); }         fatal_error( 'email_taken', "($member{'email'})" ); 
           }    }
       }     if ( 
       if ($matchname) {         lc $member{'regrealname'} eq 
           if ($matchword) {         lc MemberIndex( 'check_exist', $member{'regrealname'}, 1 ) ) 
               if ($realnamecheck eq $reservecheck) { &fatal_error('name_reserved',"$reserved"); }     { 
           } else {         fatal_error('name_taken'); 
               if ($realnamecheck =~ $reservecheck) { &fatal_error('name_reserved',"$reserved"); }    }
           }     if ( Censor( $member{'regusername'} ) ne $member{'regusername'} ) { 
       }         fatal_error( 'censor1', CheckCensor( $member{'regusername'} ) ); 
   }    }
     if ( Censor( $member{'email'} ) ne $member{'email'} ) {
   if ($default_template) { $new_template = $default_template; }         fatal_error( 'censor2', CheckCensor( $member{'email'} ) ); 
   else { $new_template = qq~Forum default~; }    }
     if ( Censor( $member{'regrealname'} ) ne $member{'regrealname'} ) {
   # check if user isn't already registered         fatal_error( 'censor3', CheckCensor( $member{'regrealname'} ) ); 
   &fatal_error("id_taken") if (-e ("$memberdir/$member{'regusername'}.vars"));     } 
   # check if user isn't already in pre-registration     if ( $honeypot == 1 && $member{'add_field0'} ne q{} ) { 
   &fatal_error("already_preregged") if (-e ("$memberdir/$member{'regusername'}.pre"));         fatal_error('bad_bot'); 
   &fatal_error("already_preregged") if (-e ("$memberdir/$member{'regusername'}.wait"));     } 
   
   if ($new_template !~ m^\A[0-9a-zA-Z\_\(\)\ \#\%\-\:\+\?\$\&\~\.\,\@]+\Z^ && $new_template ne '') { &fatal_error('invalid_template'); }     if ( $regtype == 1 ) { 
   if ($member{'language'} !~ m^\A[0-9a-zA-Z\_\(\)\ \#\%\-\:\+\?\$\&\~\.\,\@]+\Z^ && $member{'language'} ne '') { &fatal_error('invalid_language'); }         $convertstr = $member{'reason'}; 
         $convertcut = $RegReasonSymbols;
   &ToHTML($member{'language'});         CountChars(); 
         $member{'reason'} = $convertstr;
   $reguser = $member{'regusername'};  
   $registerdate = &timetostring($date);         FromChars( $member{'reason'} ); 
   $language = $member{'language'};         ToHTML( $member{'reason'} ); 
         ToChars( $member{'reason'} );
   &ToHTML($member{'regrealname'});         $member{'reason'} =~ s/[\n\r]{1,2}/<br \/>/igsm; 
     }
   if ($birthday_on_reg) {  
       $member{'birth_month'} =~ s/\D//g;     if ($regcheck) { 
       $member{'birth_day'} =~ s/\D//g;         require Sources::Decoder; 
       $member{'birth_year'} =~ s/\D//g;         validation_check( $member{'verification'} ); 
       if ($birthday_on_reg == 1) {     } 
           $member{'birth_month'} = '' if length($member{'birth_month'}) < 2 || $member{'birth_month'} < 1 || $member{'birth_month'} > 12;     $min_reg_time ||= 0; 
           $member{'birth_day'} = '' if length($member{'birth_day'}) < 2 || $member{'birth_day'} < 1 || $member{'birth_day'} > 31;     if ( $min_reg_time > 0 ) { 
           $member{'birth_year'} = '' if length($member{'birth_year'}) < 4 || $member{'birth_year'} < ($year - 120) || $member{'birth_year'} > $year;         $reg_finish_time = $date - $member{'reg_start_time'}; 
           if ($member{'birth_day'} && $member{'birth_month'} && $member{'birth_year'}) { ${$uid.$reguser}{'bday'} = "$member{'birth_month'}/$member{'birth_day'}/$member{'birth_year'}"; }         if ( $reg_finish_time < $min_reg_time || !$member{'reg_start_time'} ) { 
             fatal_error( q{}, "$register_txt{'error_min_reg_time'}" );
       } elsif ($birthday_on_reg == 2) {         } 
           &fatal_error("",$register_txt{'error_birth_month'}) if length($member{'birth_month'}) < 2 || $member{'birth_month'} < 1 || $member{'birth_month'} > 12;     } 
           &fatal_error("",$register_txt{'error_birth_day'}) if length($member{'birth_day'}) < 2 || $member{'birth_day'} < 1 || $member{'birth_day'} > 31;  
           &fatal_error("",$register_txt{'error_birth_year'}) if length($member{'birth_year'}) < 4;     if ( $en_spam_questions && -e "$langdir/$language/spam.questions" ) { 
           &fatal_error("",$register_txt{'error_birth_year_real'}) if $member{'birth_year'} < ($year - 120) || $member{'birth_year'} > $year;         SpamQuestionCheck( 
           ${$uid.$reguser}{'bday'} = "$member{'birth_month'}/$member{'birth_day'}/$member{'birth_year'}";             $member{'verification_question'}, 
       }             $member{'verification_question_id'} 
   }         ); 
   if ($gender_on_reg) {     } 
       ${$uid.$reguser}{'gender'} = $member{'gender'};  
   }     if ($emailpassword) { 
         srand;
   ${$uid.$reguser}{'password'} = &encode_password($member{'passwrd1'});         $member{'passwrd1'} = int rand 100; 
   ${$uid.$reguser}{'realname'} = $member{'regrealname'};         $member{'passwrd1'} =~ tr/0123456789/ymifxupbck/; 
   ${$uid.$reguser}{'email'} = lc($member{'email'});         $_ = int rand 77; 
   ${$uid.$reguser}{'postcount'} = 0;         $_ =~ tr/0123456789/q8dv7w4jm3/; 
   ${$uid.$reguser}{'regreason'} = $member{'reason'};         $member{'passwrd1'} .= $_; 
   ${$uid.$reguser}{'usertext'} = $defaultusertxt;         $_ = int rand 89; 
   ${$uid.$reguser}{'userpic'} = "blank.gif";         $_ =~ tr/0123456789/y6uivpkcxw/; 
   ${$uid.$reguser}{'regdate'} = $registerdate;         $member{'passwrd1'} .= $_; 
   ${$uid.$reguser}{'regtime'} = $date;         $_ = int rand 188; 
   ${$uid.$reguser}{'timeselect'} = $timeselected;         $_ =~ tr/0123456789/poiuytrewq/; 
   ${$uid.$reguser}{'timeoffset'} = $timeoffset;         $member{'passwrd1'} .= $_; 
   ${$uid.$reguser}{'dsttimeoffset'} = $dstoffset;         $_ = int rand 65; 
   ${$uid.$reguser}{'lastips'} = $user_ip;         $_ =~ tr/0123456789/lkjhgfdaut/; 
   ${$uid.$reguser}{'hidemail'} = $member{'hideemail'} ? 1 : 0;         $member{'passwrd1'} .= $_; 
   ${$uid.$reguser}{'timeformat'} = qq~MM D+ YYYY @ HH:mm:ss*~;     } 
   ${$uid.$reguser}{'template'} = $new_template;     else { 
   ${$uid.$reguser}{'language'} = $language;         if ( $member{'passwrd1'} ne $member{'passwrd2'} ) { 
   ${$uid.$reguser}{'pageindex'} = qq~1|1|1|1~;             fatal_error( 'password_mismatch', "($member{'regusername'})" ); 
   if (($addmemgroup_enabled == 1 || $addmemgroup_enabled == 3) && $member{'joinmemgroup'} ne '') {         } 
       my @newmemgr;         if ( $member{'passwrd1'} eq q{} ) { 
       foreach (split(/, /, $member{'joinmemgroup'})) {             fatal_error( 'no_password', "($member{'regusername'})" ); 
           if ($NoPost{$_} && (split /\|/, $NoPost{$_})[10] == 1) { push(@newmemgr, $_); }        }
       }         if ( $member{'passwrd1'} =~ 
       ${$uid.$reguser}{'addgroups'} = join(',', @newmemgr);             /[^\s\w!\@#\$\%\^&\*\(\)\+\|`~\-=\\:;'",\.\/\?\[\]\{\}]/xsm ) 
   }         { 
             fatal_error( 'invalid_character',
   if ($regtype == 1 || $regtype == 2) {                 "$register_txt{'36'} $register_txt{'241'}" ); 
       my (@reglist,@x);         } 
       # If a pre-registration list exists load it     } 
       if (-e "$memberdir/memberlist.inactive") {    if ( $member{'email'} !~ /^[\w\-\.\+]+\@[\w\-\.\+]+\.\w{2,4}$/xsm ) {
           fopen(INACT, "$memberdir/memberlist.inactive");         fatal_error( 'invalid_character', 
           @reglist = <INACT>;             "$register_txt{'69'} $register_txt{'241e'}" ); 
           fclose(INACT);     } 
       }     if (   $member{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/xsm 
       # If a approve-registration list exists load it too         || $member{'email'} !~ 
       if (-e "$memberdir/memberlist.approve") {         /\A.+@\[?(\w|[-.])+\.[a-zA-Z]{2,4}|[0-9]{1,4}\]?\Z/xsm ) 
           fopen(APPROVE, "$memberdir/memberlist.approve");     { 
           push(@reglist, <APPROVE>);         fatal_error('invalid_email'); 
           fclose(APPROVE);     } 
       }  
       foreach (@reglist) {     fopen( RESERVE, "$vardir/reserve.txt" ) 
           @x = split(/\|/, $_);       or fatal_error( 'cannot_open', "$vardir/reserve.txt", 1 ); 
           if ($reguser eq $x[2]) { &fatal_error("already_preregged"); }     @reserve = <RESERVE>; 
           if (lc $member{'email'} eq lc $x[4]) { &fatal_error("email_already_preregged"); }     fclose(RESERVE); 
       }     fopen( RESERVECFG, "$vardir/reservecfg.txt" ) 
       or fatal_error( 'cannot_open', "$vardir/reservecfg.txt", 1 );
       # create pre-registration .pre file and write log and inactive list     @reservecfg = <RESERVECFG>; 
       require "$sourcedir/Decoder.pl";     fclose(RESERVECFG); 
       &validation_code;  
       $activationcode = substr($sessionid, 0, 20);     for my $aa ( 0 .. $#reservecfg ) { 
         chomp $reservecfg[$aa];
       if ($extendedprofiles) {     } 
           require "$sourcedir/ExtendedProfiles.pl";     $matchword = $reservecfg[0] eq 'checked'; 
           my $error = &ext_validate_submition($reguser,$reguser);     $matchcase = $reservecfg[1] eq 'checked'; 
           if ($error ne "") { &fatal_error("extended_profiles_validation",$error); }     $matchuser = $reservecfg[2] eq 'checked'; 
           &ext_saveprofile($reguser);     $matchname = $reservecfg[3] eq 'checked'; 
       }     $namecheck = 
         $matchcase eq 'checked' 
       &UserAccount($reguser, "preregister");       ? $member{'regusername'} 
       if ($do_scramble_id) { $cryptuser = &cloak($reguser); } else { $cryptuser = $reguser; }       : lc $member{'regusername'}; 
         if ($emailpassword) { $regpass = $member{'passwrd1'}; }     $realnamecheck = 
         else { $regpass = encode_password($member{'passwrd1'}); }          $matchcase eq 'checked' 
         fopen(INACT, ">>$memberdir/memberlist.inactive", 1);       ? $member{'regrealname'} 
       print INACT "$date|$activationcode|$reguser|$regpass|$member{'email'}|$user_ip\n";       : lc $member{'regrealname'}; 
       fclose(INACT);  
       fopen(REGLOG, ">>$vardir/registration.log", 1);     foreach my $reserved (@reserve) { 
       print REGLOG "$date|N|$member{'regusername'}||$user_ip\n";         chomp $reserved; 
       fclose(REGLOG);         $reservecheck = $matchcase ? $reserved : lc $reserved; 
         if ($matchuser) {
       ## send an e-mail to the user that registration is pending e-mail validation within the given timespan. ##             if ($matchword) { 
       my $templanguage = $language;                 if ( $namecheck eq $reservecheck ) { 
       $language = $member{'language'};                     fatal_error( 'id_reserved', "$reserved" ); 
       &LoadLanguage('Email');                 } 
       &sendmail(${$uid.$reguser}{'email'}, "$mailreg_txt{'apr_result_activate'} $mbname", &template_email($preregemail, {'displayname' => $member{'regrealname'}, 'username' => $reguser, 'cryptusername' => $cryptuser, 'password' => $member{'passwrd1'}, 'activationcode' => $activationcode, 'preregspan' => $preregspan}),'',$emailcharset);             } 
       $language = $templanguage;             else { 
       $yymain .= qq~                 if ( $namecheck =~ $reservecheck ) { 
           <div class="bordercolor" style="width: 650px; margin-bottom: 8px; margin-left: auto; margin-right: auto;">                     fatal_error( 'id_reserved', "$reserved" ); 
               <div class="bordercolor" style="width: 650px; margin-bottom: 8px; margin-left: auto; margin-right: auto;">                 } 
                   <table cellpadding="4" cellspacing="1" border="0" width="100%" align="center">             } 
                       <tr><td class="titlebg"><img src="$imagesdir/register.gif" alt="$prereg_txt{'1a'}" title="$prereg_txt{'1a'}" border="0" /><b>$prereg_txt{'1a'}</b></td></tr>         } 
                       <tr><td class="windowbg" align="left">$prereg_txt{'1'}</td></tr>         if ($matchname) { 
                   </table>             if ($matchword) { 
               </div>                 if ( $realnamecheck eq $reservecheck ) { 
           </div>~;                     fatal_error( 'name_reserved', "$reserved" ); 
       $yytitle = "$prereg_txt{'1a'}";                 } 
             }
   } else {            else {
       if ($extendedprofiles) {                if ( $realnamecheck =~ $reservecheck ) {
           require "$sourcedir/ExtendedProfiles.pl";                     fatal_error( 'name_reserved', "$reserved" ); 
           my $error = &ext_validate_submition($reguser,$reguser);                 } 
           if ($error ne "") { &fatal_error("extended_profiles_validation",$error); }            }
           &ext_saveprofile($reguser);         } 
       }    }
       &UserAccount($reguser, "register");  
       &MemberIndex("add", $reguser);     if   ($default_template) { $new_template = $default_template; } 
       &FormatUserName($reguser);     else                     { $new_template = q~Forum default~; } 
   
       if ($send_welcomeim == 1) {     # check if user isn't already registered 
           # new format msg file:     if ( -e ("$memberdir/$member{'regusername'}.vars") ) { 
           # messageid|(from)user|(touser(s))|(ccuser(s))|(bccuser(s))|subject|date|message|(parentmid)|reply#|ip|messagestatus|flags|storefolder|attachment         fatal_error('id_taken'); 
           $messageid = $^T . $$;     } 
           fopen(IM, ">$memberdir/$member{'regusername'}.msg", 1);  
           print IM "$messageid|$sendname|$member{'regusername'}|||$imsubject|$date|$imtext|$messageid|0|$ENV{'REMOTE_ADDR'}|s|u||\n";     # check if user isn't already in pre-registration 
           fclose(IM);     if ( -e ("$memberdir/$member{'regusername'}.pre") ) { 
       }         fatal_error('already_preregged'); 
       if ($new_member_notification) {     } 
           my $templanguage = $language;     if ( -e ("$memberdir/$member{'regusername'}.wait") ) { 
           $language = $lang;         fatal_error('already_preregged'); 
           &LoadLanguage('Email');     } 
           &sendmail($new_member_notification_mail, $mailreg_txt{'new_member_info'}, &template_email($newmemberemail, {'displayname' => $member{'regrealname'}, 'username' => $reguser, 'userip' => $user_ip, 'useremail' => ${$uid.$reguser}{'email'}}),'',$emailcharset);  
           $language = $templanguage;     if ( $new_template !~ m{\A[0-9a-zA-Z\_\(\)\ \#\%\-\:\+\?\$\&\~\.\,\@]+\Z}xsm 
       }         && $new_template ne q{} ) 
     {
       if ($emailpassword) {         fatal_error('invalid_template'); 
           my $templanguage = $language;     } 
           $language = $member{'language'};     if ( $member{'language'} !~ 
           &LoadLanguage('Email');         m{\A[0-9a-zA-Z\_\(\)\ \#\%\-\:\+\?\$\&\~\.\,\@]+\Z}xsm 
           &sendmail(${$uid.$reguser}{'email'}, "$mailreg_txt{'apr_result_info'} $mbname", &template_email($passwordregemail, {'displayname' => $member{'regrealname'}, 'username' => $reguser, 'password' => $member{'passwrd1'}}),'',$emailcharset);         && $member{'language'} ne q{} ) 
           $language = $templanguage;     { 
           $yymain .= qq~         fatal_error('invalid_language'); 
<div class="bordercolor" style="width: 650px; margin-bottom: 8px; margin-left: auto; margin-right: auto;">     } 
       <table cellpadding="4" cellspacing="1" border="0" width="100%" align="center">  
           <tr><td class="titlebg"><b>$register_txt{'97'}</b></td></tr>     ToHTML( $member{'language'} ); 
           <tr><td class="windowbg" align="left">$register_txt{'703'}</td></tr>  
           <tr><td class="windowbg2" align="left">$register_txt{'704'}</td></tr>     $reguser      = $member{'regusername'}; 
       </table>     $registerdate = timetostring($date); 
</div>~;     $language     = $member{'language'}; 
       } else {  
           if ($emailwelcome) {     ToHTML( $member{'regrealname'} ); 
               my $templanguage = $language;  
               $language = $member{'language'};     if ($birthday_on_reg) { 
               &LoadLanguage('Email');         $member{'birth_month'} =~ s/\D//gxsm; 
               &sendmail(${$uid.$reguser}{'email'}, "$mailreg_txt{'apr_result_info'} $mbname", &template_email($welcomeregemail, {'displayname' => $member{'regrealname'}, 'username' => $reguser, 'password' => $member{'passwrd1'}}),'',$emailcharset);         $member{'birth_day'}   =~ s/\D//gxsm; 
               $language = $templanguage;         $member{'birth_year'}  =~ s/\D//gxsm; 
           }         if ( $birthday_on_reg == 1 ) { 
           $yymain .= qq~             if (   length( $member{'birth_month'} ) < 2 
           <br /><br />                 || $member{'birth_month'} < 1 
           <form action="$scripturl?action=login2" method="post">                 || $member{'birth_month'} > 12 ) 
           <table border="0" width="300" cellspacing="1" class="bordercolor" align="center">             { 
           <tr>                 $member{'birth_month'} = q{}; 
           <td class="titlebg">             } 
           <img src="$imagesdir/register.gif" alt="$register_txt{'97'}" title="$register_txt{'97'}" border="0" /> <span class="text1"><b>$register_txt{'97'}</b></span></td>             if (   length( $member{'birth_day'} ) < 2 
           </tr><tr>                 || $member{'birth_day'} < 1 
           <td class="windowbg" align="center">                 || $member{'birth_day'} > 31 ) 
           <br />$register_txt{'431'}<br /><br />             { 
           <input type="hidden" name="username" value="$member{'regusername'}" />                 $member{'birth_day'} = q{}; 
           <input type="hidden" name="passwrd" value="$member{'passwrd1'}" />             } 
           <input type="hidden" name="cookielength" value="$Cookie_Length" />             if (   length( $member{'birth_year'} ) < 4 
           <input type="submit" value="$register_txt{'34'}" class="button" />                 || $member{'birth_year'} < ( $year - 120 ) 
           </td>                 || $member{'birth_year'} > $year ) 
           </tr>             { 
           </table>                 $member{'birth_year'} = q{}; 
           </form>             } 
           <br /><br />             if (   $member{'birth_day'} 
           ~;                 && $member{'birth_month'} 
       }                 && $member{'birth_year'} ) 
       $yytitle = "$register_txt{'245'}";             { 
   }                 ${ $uid . $reguser }{'bday'} = 
   &template;  "$member{'birth_month'}/$member{'birth_day'}/$member{'birth_year'}"; 
             }
         }
         elsif ( $birthday_on_reg == 2 ) {
             if (   length( $member{'birth_month'} ) < 2
                 || $member{'birth_month'} < 1
                 || $member{'birth_month'} > 12 )
             {
                 fatal_error( q{}, $register_txt{'error_birth_month'} );
             }
             if (   length( $member{'birth_day'} ) < 2
                 || $member{'birth_day'} < 1
                 || $member{'birth_day'} > 31 )
             {
                 fatal_error( q{}, $register_txt{'error_birth_day'} );
             }
             if ( length( $member{'birth_year'} ) < 4 ) {
                 fatal_error( q{}, $register_txt{'error_birth_year'} );
             }
             if (   $member{'birth_year'} < ( $year - 120 )
                 || $member{'birth_year'} > $year )
             {
                 fatal_error( q{}, $register_txt{'error_birth_year_real'} );
             }
             ${ $uid . $reguser }{'bday'} =
  "$member{'birth_month'}/$member{'birth_day'}/$member{'birth_year'}";
         }
     }
     if ($gender_on_reg) {
         ${ $uid . $reguser }{'gender'} = $member{'gender'};
         if ( $editGenderLimit && ${ $uid . $reguser }{'gender'} ne q{} ) {
             ${ $uid . $reguser }{'disablegender'} = 1;
         }
     }
     if (   $birthday_on_reg
         && $editAgeLimit
         && ${ $uid . $reguser }{'bday'} ne q{} )
     {
         ${ $uid . $reguser }{'disableage'} = 1;
     }
   
     ${ $uid . $reguser }{'password'}   = encode_password( $member{'passwrd1'} );
     ${ $uid . $reguser }{'realname'}   = $member{'regrealname'};
     ${ $uid . $reguser }{'email'}      = lc $member{'email'};
     ${ $uid . $reguser }{'postcount'}  = 0;
     ${ $uid . $reguser }{'regreason'}  = $member{'reason'};
     ${ $uid . $reguser }{'usertext'}   = $defaultusertxt;
     ${ $uid . $reguser }{'userpic'}    = $my_blank_avatar;
     ${ $uid . $reguser }{'regdate'}    = $registerdate;
     ${ $uid . $reguser }{'regtime'}    = $date;
     ${ $uid . $reguser }{'timeselect'} = $timeselected;
     ${ $uid . $reguser }{'lastips'}    = $user_ip;
     ${ $uid . $reguser }{'hidemail'}   = $member{'hideemail'} ? 1 : 0;
     ${ $uid . $reguser }{'timeformat'} = q~MM D+ YYYY @ HH:mm:ss*~;
     ${ $uid . $reguser }{'template'}   = $new_template;
     ${ $uid . $reguser }{'language'}   = $language;
     ${ $uid . $reguser }{'pageindex'}  = q~1|1|1|1~;
   
     if ( ( $addmemgroup_enabled == 1 || $addmemgroup_enabled == 3 )
         && $member{'joinmemgroup'} ne q{} )
     {
         my @newmemgr;
         foreach ( split /, /sm, $member{'joinmemgroup'} ) {
             if ( $NoPost{$_} && ( split /\|/xsm, $NoPost{$_} )[10] == 1 ) {
                 push @newmemgr, $_;
             }
         }
         ${ $uid . $reguser }{'addgroups'} = join q{,}, @newmemgr;
     }
   
     if ( $regtype == 1 || $regtype == 2 ) {
         my ( @reglist, @x );
   
         # If a pre-registration list exists load it
         if ( -e "$memberdir/memberlist.inactive" ) {
             fopen( INACT, "$memberdir/memberlist.inactive" );
             @reglist = <INACT>;
             fclose(INACT);
         }
   
         # If a approve-registration list exists load it too
         if ( -e "$memberdir/memberlist.approve" ) {
             fopen( APPROVE, "$memberdir/memberlist.approve" );
             push @reglist, <APPROVE>;
             fclose(APPROVE);
         }
         foreach (@reglist) {
             @x = split /\|/xsm, $_;
             if ( $reguser eq $x[2] ) { fatal_error('already_preregged'); }
             if ( lc $member{'email'} eq lc $x[4] ) {
                 fatal_error('email_already_preregged');
             }
         }
   
         # create pre-registration .pre file and write log and inactive list
         require Sources::Decoder;
         validation_code();
         $activationcode = substr $sessionid, 0, 20;
   
         if ($extendedprofiles) {
             require Sources::ExtendedProfiles;
             my $error = ext_validate_submition( $reguser, $reguser );
             if ( $error ne q{} ) {
                 fatal_error( 'extended_profiles_validation', $error );
             }
             ext_saveprofile($reguser);
         }
   
         UserAccount( $reguser, 'preregister' );
         if   ($do_scramble_id) { $cryptuser = cloak($reguser); }
         else                   { $cryptuser = $reguser; }
   
         $regpass = $member{'passwrd1'};
   
         fopen( INACT, ">>$memberdir/memberlist.inactive", 1 );
         print {INACT}
           "$date|$activationcode|$reguser|$regpass|$member{'email'}|$user_ip\n" 
           or croak "$croak{'print'} INACT";
         fclose(INACT);
         fopen( REGLOG, ">>$vardir/registration.log", 1 );
         print {REGLOG} "$date|N|$member{'regusername'}||$user_ip\n" 
           or croak "$croak{'print'} REGLOG";
         fclose(REGLOG);
   
         ## send an e-mail to the user that registration is pending e-mail validation within the given timespan. ##
         my $templanguage = $language;
         $language = $member{'language'};
         LoadLanguage('Email');
         sendmail(
             ${ $uid . $reguser }{'email'},
             "$mailreg_txt{'apr_result_activate'} $mbname",
             template_email(
                 $preregemail,
                 {
                     'displayname'    => $member{'regrealname'},
                     'username'       => $reguser,
                     'cryptusername'  => $cryptuser,
                     'password'       => $member{'passwrd1'},
                     'activationcode' => $activationcode,
                     'preregspan'     => $preregspan
                 }
             ),
             q{},
             $emailcharset
         );
         $language = $templanguage;
         $yymain .= $myregister_pending;
         $yytitle = "$prereg_txt{'1a'}";
   
     }
     else {
         if ($extendedprofiles) {
             require Sources::ExtendedProfiles;
             my $error = ext_validate_submition( $reguser, $reguser );
             if ( $error ne q{} ) {
                 fatal_error( 'extended_profiles_validation', $error );
             }
             ext_saveprofile($reguser);
         }
         UserAccount( $reguser, 'register' );
         MemberIndex( 'add', $reguser );
         FormatUserName($reguser);
   
         if ( $send_welcomeim == 1 ) {
   
  # new format msg file:
  # messageid|(from)user|(touser(s))|(ccuser(s))|(bccuser(s))|subject|date|message|(parentmid)|reply#|ip|messagestatus|flags|storefolder|attachment
             $messageid = $BASETIME . $PROCESS_ID;
             fopen( IM, ">$memberdir/$member{'regusername'}.msg", 1 );
             print {IM}
  "$messageid|$sendname|$member{'regusername'}|||$imsubject|$date|$imtext|$messageid|0|$ENV{'REMOTE_ADDR'}|s|u||\n" 
               or croak "$croak{'print'} IM";
             fclose(IM);
         }
         if ($new_member_notification) {
             my $templanguage = $language;
             $language = $lang;
             LoadLanguage('Email');
             sendmail(
                 $new_member_notification_mail,
                 $mailreg_txt{'new_member_info'},
                 template_email(
                     $newmemberemail,
                     {
                         'displayname' => $member{'regrealname'},
                         'username'    => $reguser,
                         'userip'      => $user_ip,
                         'useremail'   => ${ $uid . $reguser }{'email'}
                     }
                 ),
                 q{},
                 $emailcharset
             );
             $language = $templanguage;
         }
   
         if ($emailpassword) {
             my $templanguage = $language;
             $language = $member{'language'};
             LoadLanguage('Email');
             sendmail(
                 ${ $uid . $reguser }{'email'},
                 "$mailreg_txt{'apr_result_info'} $mbname",
                 template_email(
                     $passwordregemail,
                     {
                         'displayname' => $member{'regrealname'},
                         'username'    => $reguser,
                         'password'    => $member{'passwrd1'}
                     }
                 ),
                 q{},
                 $emailcharset
             );
             $language = $templanguage;
             $yymain .= $myregister_password;
         }
         else {
             if ($emailwelcome) {
                 my $templanguage = $language;
                 $language = $member{'language'};
                 LoadLanguage('Email');
                 sendmail(
                     ${ $uid . $reguser }{'email'},
                     "$mailreg_txt{'apr_result_info'} $mbname",
                     template_email(
                         $welcomeregemail,
                         {
                             'displayname' => $member{'regrealname'},
                             'username'    => $reguser,
                             'password'    => $member{'passwrd1'}
                         }
                     ),
                     q{},
                     $emailcharset
                 );
                 $language = $templanguage;
             }
             $yymain .= $myregister_welcome;
             $yymain =~ s/{yabb regusername}/$member{'regusername'}/sm;
             $yymain =~ s/{yabb passwrd1}/$member{'passwrd1'}/sm;
             $yymain =~ s/{yabb Cookie_Length}/$Cookie_Length/sm;
         }
         $yytitle = "$register_txt{'245'}";
     }
     template();
     return;
} }
   
sub user_activation { sub user_activation {
   $changed       = 0;     my ( $reguse, $active ) = @_; 
   $reguser       = $_[0] || $INFO{'username'};     $changed       = 0; 
   $activationkey = $_[1] || $INFO{'activationkey'};     $reguser       = $reguse || $INFO{'username'}; 
   &fatal_error('wrong_id') unless $reguser;     $activationkey = $active || $INFO{'activationkey'}; 
   if ($do_scramble_id) { $reguser = &decloak($reguser); }    if ( !$reguser ) { fatal_error('wrong_id'); }
   if (!-e "$memberdir/$reguser.pre" && -e "$memberdir/$reguser.vars") { &fatal_error("already_activated"); }    if ($do_scramble_id) { $reguser = decloak($reguser); }
   if (!-e "$memberdir/$reguser.pre") { &fatal_error("prereg_expired"); }     if ( !-e "$memberdir/$reguser.pre" && -e "$memberdir/$reguser.vars" ) { 
   # If a pre-registration list exists load it         fatal_error('already_activated'); 
   if (-e "$memberdir/memberlist.inactive") {     } 
       fopen(INACT, "$memberdir/memberlist.inactive");     if ( ( $regtype != 1 && !-e "$memberdir/$reguser.pre" ) || ( $regtype == 1 && !-e "$memberdir/$reguser.pre" && !-e "$memberdir/$reguser.wait" ) ) { fatal_error('prereg_expired'); } 
       @reglist = <INACT>;     elsif ( $regtype == 1 && -e "$memberdir/$reguser.wait" ) { fatal_error('prereg_wait'); } 
       fclose(INACT);     # If a pre-registration list exists load it 
   } else {    if ( -e "$memberdir/memberlist.inactive" ) {
       # add entry to registration log         fopen( INACT, "$memberdir/memberlist.inactive" ); 
       fopen(REGLOG, ">>$vardir/registration.log", 1);         @reglist = <INACT>; 
       print REGLOG "$date|E|$reguser||$user_ip\n";         fclose(INACT); 
       fclose(REGLOG);     } 
       &fatal_error("prereg_expired");     else { 
   }  
   if ($regtype == 1 && -e "$memberdir/memberlist.approve") {         # add entry to registration log 
       fopen(APR, "$memberdir/memberlist.approve");         fopen( REGLOG, ">>$vardir/registration.log", 1 ); 
       @aprlist = <APR>;         print {REGLOG} "$date|E|$reguser||$user_ip\n" 
       fclose(APR);           or croak "$croak{'print'} REGLOG"; 
   }         fclose(REGLOG); 
         fatal_error('prereg_expired');
   # check if user is in pre-registration and check activation key     } 
   foreach (@reglist) {    if ( $regtype == 1 && -e "$memberdir/memberlist.approve" ) {
       ($regtime, $testkey, $regmember, $regpassword, undef) = split(/\|/, $_, 5);         fopen( APR, "$memberdir/memberlist.approve" ); 
         @aprlist = <APR>;
       if ($regmember ne $reguser) {         fclose(APR); 
           push(@chnglist, $_); # update non activate user list     } 
       } else {  
           my $templanguage = $language;     # check if user is in pre-registration and check activation key 
           if ($activationkey ne $testkey) {    foreach (@reglist) {
               fopen(REGLOG, ">>$vardir/registration.log", 1);         ( $regtime, $testkey, $regmember, $regpassword, undef ) = 
               print REGLOG "$date|E|$reguser||$user_ip\n"; # add entry to registration log           split /\|/xsm, $_, 5; 
               fclose(REGLOG);  
               &fatal_error("wrong_code");         if ( $regmember ne $reguser ) { 
             push @chnglist, $_;    # update non activate user list
           } elsif ($regtype == 1) {         } 
               # user is in list and the keys match, so move him/her for admin approval         else { 
               unshift(@aprlist, $_);             my $templanguage = $language; 
             if ( $activationkey ne $testkey ) {
               rename("$memberdir/$reguser.pre", "$memberdir/$reguser.wait");                 fopen( REGLOG, ">>$vardir/registration.log", 1 ); 
                 print {REGLOG} "$date|E|$reguser||$user_ip\n" 
               # add entry to registration log                   or croak "$croak{'print'} REGLOG"; 
               if ($iamadmin || $iamgmod) { $actuser = $username; } else { $actuser = $reguser; }  
               fopen(REGLOG, ">>$vardir/registration.log", 1);                 # add entry to registration log 
               print REGLOG "$date|W|$reguser|$actuser|$user_ip\n";                 fclose(REGLOG); 
               fclose(REGLOG);                 fatal_error('wrong_code'); 
   
               &LoadUser($reguser);             } 
               $language = ${$uid.$reguser}{'language'};             elsif ( $regtype == 1 ) { 
               &LoadLanguage('Email');  
               &sendmail(${$uid.$reguser}{'email'}, "$mailreg_txt{'apr_result_wait'} $mbname", &template_email($approveregemail, {'username' => $reguser, 'displayname' => ${$uid.$reguser}{'realname'}}),'',$emailcharset);         # user is in list and the keys match, so move him/her for admin approval 
                 unshift @aprlist, $_;
           } elsif ($regtype == 2) {  
               &LoadUser($reguser);                 rename "$memberdir/$reguser.pre", "$memberdir/$reguser.wait"; 
               # ckeck if email is allready in active use  
               if (lc ${$uid.$reguser}{'email'} eq lc &MemberIndex("check_exist", ${$uid.$reguser}{'email'})) {                 # add entry to registration log 
                   &fatal_error("email_taken", "(${$uid.$reguser}{'email'})");                 if   ( $iamadmin || $iamgmod ) { $actuser = $username; } 
               }                else                           { $actuser = $reguser; }
                 fopen( REGLOG, ">>$vardir/registration.log", 1 );
               # user is in list and the keys match, so let him/her in                 print {REGLOG} "$date|W|$reguser|$actuser|$user_ip\n" 
               rename("$memberdir/$reguser.pre", "$memberdir/$reguser.vars");                   or croak "$croak{'print'} REGLOG"; 
               &MemberIndex("add", $reguser);                 fclose(REGLOG); 
   
               if ($iamadmin || $iamgmod) { $actuser = $username; } else { $actuser = $reguser; }                 LoadUser($reguser); 
               # add entry to registration log                 $language = ${ $uid . $reguser }{'language'}; 
               fopen(REGLOG, ">>$vardir/registration.log", 1);                 LoadLanguage('Email'); 
               print REGLOG "$date|A|$reguser|$actuser|$user_ip\n";                 sendmail( 
               fclose(REGLOG);                     ${ $uid . $reguser }{'email'}, 
                     "$mailreg_txt{'apr_result_wait'} $mbname",
               if ($emailpassword) {                     template_email( 
                   chomp $regpassword;                         $approveregemail, 
                   $language = ${$uid.$reguser}{'language'};                         { 
                   &LoadLanguage('Email');                             'username'    => $reguser, 
                   &sendmail(${$uid.$reguser}{'email'}, "$mailreg_txt{'apr_result_validate'} $mbname", &template_email($activatedpassregemail, {'displayname' => ${$uid.$reguser}{'realname'}, 'username' => $reguser, 'password' => $regpassword}),'',$emailcharset);                             'displayname' => ${ $uid . $reguser }{'realname'} 
                   $yymain .= qq~<br /><table border="0" width="100%" cellspacing="1" class="bordercolor" align="center">~;                         } 
                   $sharedLogin_title = $register_txt{'97'};                     ), 
                   $sharedLogin_text  = $register_txt{'703'};                     q{}, 
                   $yymain .= qq~</table>~;                     $emailcharset 
                 );
               } elsif ($emailwelcome) {  
                   chomp $regpassword;             } 
                   $language = ${$uid.$reguser}{'language'};             elsif ( $regtype == 2 ) { 
                   &LoadLanguage('Email');                 LoadUser($reguser); 
                   &sendmail(${$uid.$reguser}{'email'}, "$mailreg_txt{'apr_result_validate'} $mbname", &template_email($activatedwelcomeregemail, {'displayname' => ${$uid.$reguser}{'realname'}, 'username' => $reguser, 'password' => $regpassword}),'',$emailcharset);  
               }                 # check if email is already in active use 
           }                 if ( 
                     lc ${ $uid . $reguser }{'email'} eq
           if ($send_welcomeim == 1) {                     lc MemberIndex( 'check_exist', 
               # new format msg file:                         ${ $uid . $reguser }{'email'}, 2 ) ) 
               # messageid|(from)user|(touser(s))|(ccuser(s))|(bccuser(s))|subject|date|message|(parentmid)|reply#|ip|messagestatus|flags|storefolder|attachment                 { 
               $messageid = $^T . $$;                     fatal_error( 'email_taken', "(${$uid.$reguser}{'email'})" ); 
               fopen(INBOX, ">$memberdir/$reguser.msg");                 } 
               print INBOX "$messageid|$sendname|$reguser|||$imsubject|$date|$imtext|$messageid|0|$ENV{'REMOTE_ADDR'}|s|u||\n";  
               fclose(INBOX);                 # user is in list and the keys match, so let him/her in 
           }                 rename "$memberdir/$reguser.pre", "$memberdir/$reguser.vars"; 
           if ($new_member_notification) {                 MemberIndex( 'add', $reguser ); 
               $language = $lang;  
               &LoadLanguage('Email');                 if   ( $iamadmin || $iamgmod ) { $actuser = $username; } 
               &sendmail($new_member_notification_mail, $mailreg_txt{'new_member_info'}, &template_email($newmemberemail, {'displayname' => ${$uid.$reguser}{'realname'}, 'username' => $reguser, 'userip' => $user_ip, 'useremail' => ${$uid.$reguser}{'email'}}),'',$emailcharset);                 else                           { $actuser = $reguser; } 
           }  
           $language = $templanguage;                 # add entry to registration log 
           $changed = 1;                 fopen( REGLOG, ">>$vardir/registration.log", 1 ); 
       }                 print {REGLOG} "$date|A|$reguser|$actuser|$user_ip\n" 
   }                   or croak "$croak{'print'} REGLOG"; 
                 fclose(REGLOG);
   if ($changed) {  
       # if changed write new inactive list                 if ($emailpassword) { 
       fopen(INACT, ">$memberdir/memberlist.inactive");                     chomp $regpassword; 
       print INACT @chnglist;                     $language = ${ $uid . $reguser }{'language'}; 
       fclose(INACT);                     LoadLanguage('Email'); 
       # update approval user list                     sendmail( 
       if ($regtype == 1) {                         ${ $uid . $reguser }{'email'}, 
           fopen(APR, ">$memberdir/memberlist.approve");                         "$mailreg_txt{'apr_result_validate'} $mbname", 
           print APR @aprlist;                         template_email( 
           fclose(APR);                             $activatedpassregemail, 
       }                             { 
   } else {                                 'displayname' => 
       # add entry to registration log                                   ${ $uid . $reguser }{'realname'}, 
       fopen(REGLOG, ">>$vardir/registration.log", 1);                                 'username' => $reguser, 
       print REGLOG "$date|E|$reguser|$user_ip\n";                                 'password' => $regpassword 
       fclose(REGLOG);                             } 
       &fatal_error("wrong_id");                         ), 
   }                         q{}, 
                         $emailcharset
   if ($regtype == 1) {                     ); 
           $yymain .= qq~                     $yymain .= $myregister_table_a; 
               <div class="bordercolor" style="width: 650px; margin-bottom: 8px; margin-left: auto; margin-right: auto;">                     $sharedLogin_title = $register_txt{'97'}; 
                   <div class="bordercolor" style="width: 650px; margin-bottom: 8px; margin-left: auto; margin-right: auto;">                     $sharedLogin_text  = $register_txt{'703'}; 
                       <table cellpadding="4" cellspacing="1" border="0" width="100%" align="center">                     $yymain .= $myregister_table_b; 
                           <tr><td class="titlebg"><img src="$imagesdir/register.gif" alt="$prereg_txt{'1a'}" title="$prereg_txt{'1a'}" border="0" /><b>$prereg_txt{'1a'}</b></td></tr>  
                           <tr><td class="windowbg" align="left">$prereg_txt{'13'}</td></tr>                 } 
                       </table>                 elsif ($emailwelcome) { 
                   </div>                     chomp $regpassword; 
               </div>~;                     $language = ${ $uid . $reguser }{'language'}; 
           $yytitle = "$prereg_txt{'1b'}";                     LoadLanguage('Email'); 
                     sendmail(
   } elsif ($regtype == 2) {                         ${ $uid . $reguser }{'email'}, 
       $yymain .= qq~                         "$mailreg_txt{'apr_result_validate'} $mbname", 
       <br /><br />                         template_email( 
       <table border="0" width="650" cellspacing="1" class="bordercolor" align="center">                             $activatedwelcomeregemail, 
       <tr>                             { 
       <td colspan="2" class="titlebg">                                 'displayname' => 
       <img src="$imagesdir/register.gif" alt="$prereg_txt{'1a'}" title="$prereg_txt{'1a'}" border="0" /> <span class="text1"><b>$prereg_txt{'1a'}</b></span></td>                                   ${ $uid . $reguser }{'realname'}, 
       </tr><tr>                                 'username' => $reguser, 
       <td colspan="2" class="windowbg" align="center">                                 'password' => $regpassword 
       <br />$prereg_txt{'5'}~;                             } 
       $yymain .= $prereg_txt{'5a'} unless $emailpassword;                         ), 
       $yymain .= qq~$prereg_txt{'5b'}<br /><br />~;                         q{}, 
       if ($emailpassword) {                         $emailcharset 
           $yymain .= qq~$register_txt{'703'}<br /> <br />~;                     ); 
       }                }
       $yymain .= qq~             } 
       </td>  
       </tr>             if ( $send_welcomeim == 1 ) { 
       </table>  
       ~;  # new format msg file: 
  # messageid|(from)user|(touser(s))|(ccuser(s))|(bccuser(s))|subject|date|message|(parentmid)|reply#|ip|messagestatus|flags|storefolder|attachment
       if (!$iamadmin && !$iamgmod) {                 $messageid = $BASETIME . $PROCESS_ID; 
           unless ($emailpassword) {                 fopen( INBOX, ">$memberdir/$reguser.msg" ); 
               $yymain .= qq~<div class="bordercolor" style="width: 650px; margin-bottom: 8px; margin-left: auto; margin-right: auto;">~;                 print {INBOX} 
               require "$sourcedir/LogInOut.pl";  "$messageid|$sendname|$reguser|||$imsubject|$date|$imtext|$messageid|0|$ENV{'REMOTE_ADDR'}|s|u||\n" 
               $yymain .= &sharedLogin;                   or croak "$croak{'print'} INBOX"; 
               $yymain .= qq~</div>~;                 fclose(INBOX); 
           } else {             } 
               $yymain .= qq~<br /><br />~;             if ($new_member_notification) { 
           }                 $language = $lang; 
       }                 LoadLanguage('Email'); 
       $yytitle = "$prereg_txt{'5'}";                 sendmail( 
   }                     $new_member_notification_mail, 
                     $mailreg_txt{'new_member_info'},
   if ($iamadmin || $iamgmod) {                     template_email( 
       $yySetLocation = qq~$adminurl?action=view_reglog~;                         $newmemberemail, 
       &redirectexit;                         { 
   } else {                             'displayname' => ${ $uid . $reguser }{'realname'}, 
       &template;                             'username'    => $reguser, 
   }                             'userip'      => $user_ip, 
                             'useremail'   => ${ $uid . $reguser }{'email'}
                         }
                     ),
                     q{},
                     $emailcharset
                 );
             }
             $language = $templanguage;
             $changed  = 1;
         }
     }
   
     if ($changed) {
   
         # if changed write new inactive list
         fopen( INACT, ">$memberdir/memberlist.inactive" );
         print {INACT} @chnglist or croak "$croak{'print'} INACT";
         fclose(INACT);
   
         # update approval user list
         if ( $regtype == 1 ) {
             fopen( APR, ">$memberdir/memberlist.approve" );
             print {APR} @aprlist or croak "$croak{'print'} APR";
             fclose(APR);
         }
     }
     else {
   
         # add entry to registration log
         fopen( REGLOG, ">>$vardir/registration.log", 1 );
         print {REGLOG} "$date|E|$reguser|$user_ip\n" 
           or croak "$croak{'print'} REGLOG";
         fclose(REGLOG);
         fatal_error('wrong_id');
     }
   
     if ( $regtype == 1 ) {
         $yymain .= $myregister_prereg1;
         $yytitle = "$prereg_txt{'1b'}";
   
     }
     elsif ( $regtype == 2 ) {
         $yymain .= $myregister_prereg2;
         if ( !$emailpassword ) { $yymain .= $prereg_txt{'5a'}; }
         $yymain .= qq~$prereg_txt{'5b'}<br /><br />~;
         if ($emailpassword) {
             $yymain .= qq~$register_txt{'703'}<br /> <br />~;
         }
         $yymain .= $myregister_enddiv;
   
         if ( !$iamadmin && !$iamgmod ) {
             if ( !$emailpassword ) {
                 $yymain .= $myregister_div_a;
                 require Sources::LogInOut;
                 $yymain .= sharedLogin();
                 $yymain .= $myregister_div_b;
             }
             else {
                 $yymain .= q~<br /><br />~;
             }
         }
         $yytitle = "$prereg_txt{'5'}";
     }
   
     if ( $iamadmin || $iamgmod ) {
         $yySetLocation = qq~$adminurl?action=view_reglog~;
         redirectexit();
     }
     else {
         template();
     }
     return;
} }
   
1; 1;