# Helpdesk system

use Msgs;
my $Msgs  = Msgs->new($db, $admin, \%conf);
my $users = Users->new($db, $admin, \%conf);

my @priority = ("$_VERY_LOW", "$_LOW", "$_NORMAL", "$_HIGH", "$_VERY_HIGH");
my @msg_status = ("$_OPEN", "$_CLOSED_UNSUCCESSFUL", "$_CLOSED_SUCCESSFUL");
@msgs_status_colors = ("#0000FF", "$_COLORS[6]", '#808080', '#009D00', '#FF8000');
my @priority_colors = ('#8A8A8A', "$_COLORS[8]", "$_COLORS[9]", '#E06161', "$_COLORS[6]");

#*******************************************************************
# Delete user from module
# msgs_user_del()
#*******************************************************************
sub msgs_user_del {
  my ($uid, $attr) = @_;

  $Msgs->{UID} = $uid;
  $Msgs->message_del({ UID => $uid });

  return 0;
}

#*******************************************************************
# Message system admins
#*******************************************************************
sub msgs_admins {

  my @privilages_arr = ('READ', 'WRITE', 'ADD', 'ALL');

  if ($FORM{change}) {
    $Msgs->admin_change({%FORM});
    if (!$Msgs->{errno}) {
      $html->message('info', $_INFO, "$_CHANGED");
    }
  }
  elsif ($FORM{chg}) {
    my $a_list             = $Msgs->admins_list({ AID => $FORM{AID} });
    my %A_PRIVILEGES       = ();
    my %A_MAIL_SEND        = ();
    my %A_DELIGATION_LEVEL = ();

    foreach my $line (@$a_list) {
      $A_PRIVILEGES{ $line->[5] }       = $line->[2];
      $A_DELIGATION_LEVEL{ $line->[5] } = $line->[3];
      $A_MAIL_SEND{ $line->[5] }        = $line->[6];
      $Msgs->{ADMIN}                    = $line->[0];
    }

    if (!$Msgs->{errno}) {
      $html->message('info', $_INFO, "$_CHANGE");
    }

    my $list = $Msgs->chapters_list({ AID => $FORM{AID} });
    my $table = $html->table(
      {
        width      => '100%',
        title      => [ 'ID', "$_CHAPTERS", "$_ACCESS", 'E-mail', "$_PRIORITY" ],
        cols_align => [ 'right', 'left', 'center', 'center', 'center' ],
        ID         => 'ADMIN_ACCESS'
      }
    );

    my @DELIGATION_LEVEL_ARR = (0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10);

    foreach my $line (@$list) {
      my $privileges = $html->form_select(
        'PRIORITY_' . $line->[0],
        {
          SELECTED => ($A_PRIVILEGES{ $line->[0] }) ? $A_PRIVILEGES{ $line->[0] } : 0,
          SEL_ARRAY    => \@privilages_arr,
          ARRAY_NUM_ID => 1
        }
      );

      my $deligation_level = $html->form_select(
        'DELIGATION_LEVEL_' . $line->[0],
        {
          SELECTED => ($A_DELIGATION_LEVEL{ $line->[0] }) ? $A_DELIGATION_LEVEL{ $line->[0] } : 0,
          ,
          SEL_ARRAY    => \@DELIGATION_LEVEL_ARR,
          ARRAY_NUM_ID => 1
        }
      );

      $table->addrow(
        $line->[0]
        . $html->form_input(
          'IDS',
          "$line->[0]",
          {
            TYPE  => 'checkbox',
            STATE => (defined($A_PRIVILEGES{ $line->[0] })) ? 1 : undef
          }
        ),
        $line->[1],
        $privileges,
        $html->form_input(
          'EMAIL_NOTIFY_' . $line->[0],
          1,
          {
            TYPE  => 'checkbox',
            STATE => ($A_MAIL_SEND{ $line->[0] }) ? 1 : undef
          }
        ),
        $deligation_level,
      );
    }

    $Msgs->{CHAPTERS} = $table->show();

    $html->tpl_show(_include('msgs_admin', 'Msgs'), $Msgs);
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }

  my $list  = $Msgs->admins_list({%LIST_PARAMS});
  my $table = $html->table(
    {
      width      => '100%',
      caption    => "$_ADMINS",
      title      => [ $_ADMIN, "$_CHAPTERS", "$_PERMISSION", "$_MESSAGES", 'E-mail', "$_PRIORITY", "-" ],
      cols_align => [ 'left', 'left', 'center', 'right', 'center', 'right', 'center:noprint' ],
      qs         => $pages_qs,
      ID         => 'MSGS_ADMINS'
    }
  );

  my %A_PRIVILEGES = ();
  foreach my $line (@$list) {
    push @{ $A_PRIVILEGES{ $line->[0] } }, "$line->[1]|$line->[2]|$line->[3]|$line->[4]|$line->[5]}|$line->[6]|$line->[7]";
  }

  foreach my $admin_id (sort keys %A_PRIVILEGES) {
    my $rows = $#{ $A_PRIVILEGES{$admin_id} };
    my @arr  = @{ $A_PRIVILEGES{$admin_id} };

    my ($chapter_name, $privilege, $deligation_level, $aid, $chapter_id, $mail_send, $priority_level) = split(/\|/, $arr[0]);

    $table->addtd(
      $table->td($admin_id, { rowspan => ($rows > 0) ? $rows + 1 : 1 }),
      $table->td($chapter_name),
      $table->td(($rows == 0) ? $_ALL : $privilages_arr[$privilege]),
      $table->td($msgs),
      $table->td($bool_vals[$mail_send]),
      $table->td($deligation_level),
      $table->td($html->button("$_CHANGE", "index=$index&chg=$aid&AID=$aid", { CLASS => 'change' }), { rowspan => (($rows > 0) ? $rows + 1 : 1) })
    );

    if ($rows > 0) {
      for (my $i = 1 ; $i <= $rows ; $i++) {
        my ($chapter_name, $privilege, $deligation_level, $aid, $chapter_id, $mail_send, $priority_level) = split(/\|/, $arr[$i]);
        $table->addrow($chapter_name, $privilages_arr[$privilege], $msgs, $bool_vals[$mail_send], $deligation_level);
      }
    }
  }

  print $table->show();
}

#**********************************************************
#
#**********************************************************
sub msgs_admin_add {
  my ($attr) = @_;

  if ($attr->{ACTION}) {
    $Msgs->{ACTION}     = $attr->{ACTION};
    $Msgs->{LNG_ACTION} = $attr->{LNG_ACTION};
  }
  else {
    $Msgs->{ACTION}     = 'add';
    $Msgs->{LNG_ACTION} = $_SEND;
  }

  if ($FORM{add}) {
    if ($FORM{DISPATCH_CREATE}) {
      $FORM{COMMENTS} = $FORM{DISPATCH_COMMENTS};
      $Msgs->dispatch_add({ %FORM, PLAN_DATE => $FORM{DISPATCH_PLAN_DATE} });
      $FORM{DISPATCH_ID} = $Msgs->{DISPATCH_ID};
      $html->message('info', $_INFO, "$_DISPATCH $_ADDED") if (!$Msgs->{errno});
    }

    my $message = '';
    my $Dv;
    my $cmd = '';
    my $rad = '';
    if ($conf{MSGS_REDIRECT_FILTER_ADD}) {
      require "Dv.pm";
      $Dv = Dv->new($db, $admin, \%conf);
      $conf{MSGS_REDIRECT_FILTER_ADD} =~ /(EXEC:[a-zA-Z0-9\_\-\.\/ \>\%\"\'\@\=]+)?;?(RAD:.+)?/;
      $cmd = $1;
      $rad = $2;
      $cmd =~ s/EXEC://;
    }

    #Multi send
    if (!$FORM{INNER_MSG} && (defined($FORM{GID}) || ($FORM{GID} == 0 && $FORM{UID} == 0))) {
      my %NUMBERS = ();
      my $list    = $users->list(
        {
          GID       => $FORM{GID},
          PAGE_ROWS => 1000000,
          DISABLE   => 0,
          PHONE     => '*'
        }
      );

      my @uids = ();
      foreach my $line (@$list) {
        $FORM{UID} = $line->[ 5 + $users->{SEARCH_FIELDS_COUNT} ];
        my $email = $line->[ 7 + $users->{SEARCH_FIELDS_COUNT} ];
        $NUMBERS{ $line->[ 3 + $users->{SEARCH_FIELDS_COUNT} - (($admin->{permissions}->{0}->{8}) ? 0 : 1) ] } = $FORM{UID};

        push @uids, $FORM{UID};
        $Msgs->message_add(
          {
            %FORM,
            STATE => ((!$FORM{STATE} || $FORM{STATE} == 0) && !$FORM{INNER_MSG}) ? 6 : $FORM{STATE},
            ADMIN_READ => (!$FORM{INNER_MSG}) ? "$DATE $TIME" : '0000-00-00 00:00:00',
            IP => $admin->{SESSION_IP}
          }
        );
        if ($Msgs->{errno}) {
          $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
          return 0;
        }

        if ($conf{MSGS_REDIRECT_FILTER_ADD}) {
          if ($rad ne '') {
            $Dv->change({ UID => $FORM{UID}, FILTER_ID => $rad });
          }
        }

        #Sendmail
        if ($email) {
          my $message = $html->tpl_show(
            _include('msgs_email_notify', 'Msgs'),
            {
              SITE       => $site,
              DATE       => $DATE,
              TIME       => $TIME,
              ID         => $Msgs->{INSERT_ID},
              SUBJECT    => $FORM{SUBJECT} . ' / ' . $FORM{REPLY_SUBJECT},
              LOGIN      => $line->[0],
              UID        => $FORM{UID},
              STATUS     => $msg_status[ $FORM{STATE} ],
              MESSAGE    => $FORM{MESSAGE},
              ATTACHMENT => $FORM{FILE_UPLOAD}{filename}
            },
            { OUTPUT2RETURN => 1 }
          );

          sendmail("$conf{ADMIN_MAIL}", "$email", "$conf{WEB_TITLE} - $_NEW_MESSAGE", "$message", "$conf{MAIL_CHARSET}", undef, { MAIL_HEADER => ["X-ABillS-Msg-ID: $Msgs->{INSERT_ID}"] });
        }
      }

      if ($cmd ne '') {
        $cmd = tpl_parse($cmd, { ACTION => 'add', UIDS => "UIDS " . join(',', @uids) });
        my $res = `$cmd`;
      }

      #Sms Send
      if ($FORM{SEND_SMS}) {
        if (!$FORM{INNER_MSG}) {
          require "Abills/modules/Sms/webinterface";
          sms_send(
            {
              NUMBERS => \%NUMBERS,
              MESSAGE => $FORM{MESSAGE},
              UID     => $users->{UID} || $FORM{UID}
            }
          );
        }
      }
      $message = "$_TOTAL: $users->{TOTAL}";
      $LIST_PARAMS{PAGE_ROWS} = 25;
      undef $FORM{UID};
    }
    else {
      $Msgs->message_add(
        {
          %FORM,
          STATE => ((!$FORM{STATE} || $FORM{STATE} == 0) && !$FORM{INNER_MSG}) ? 6 : $FORM{STATE},
          ADMIN_READ => (!$FORM{INNER_MSG} || ($FORM{STATE} == 1 || $FORM{STATE} == 2)) ? "$DATE $TIME" : '0000-00-00 00:00:00',
          IP => $admin->{SESSION_IP}
        }
      );

      if (!$FORM{INNER_MSG}) {
        $users->pi({ UID => $FORM{UID} });
        if ($conf{MSGS_REDIRECT_FILTER_ADD}) {
          if ($cmd ne '') {
            $cmd = tpl_parse($cmd, { ACTION => 'add', UIDS => "UIDS " . $FORM{UID} });
            my $res = `$cmd`;
          }
          if ($rad ne '') {
            $Dv->change({ UID => $FORM{UID}, FILTER_ID => $rad });
          }
        }
      }

      if ($FORM{SEND_SMS}) {
        if (!$FORM{INNER_MSG}) {
          require "Abills/modules/Sms/webinterface";
          sms_send(
            {
              NUMBER  => $users->{PHONE},
              MESSAGE => $FORM{MESSAGE},
              UID     => $users->{UID} || $FORM{UID}
            }
          );
        }
      }
    }

    if (!$Msgs->{errno}) {

      #Add attachment
      if ($FORM{FILE_UPLOAD}{filename}) {
        $Msgs->attachment_add(
          {
            MSG_ID       => $Msgs->{INSERT_ID},
            CONTENT      => $FORM{FILE_UPLOAD}{Contents},
            FILESIZE     => $FORM{FILE_UPLOAD}{Size},
            FILENAME     => $FORM{FILE_UPLOAD}{filename},
            CONTENT_TYPE => $FORM{FILE_UPLOAD}{'Content-Type'},
            UID          => $FORM{UID}
          }
        );
      }

      $html->message('info', $_MESSAGES, "$_SENDED $_MESSAGE $message");
      if ($FORM{INNER_MSG}) {
        msgs_notify_admins();
      }
      elsif ($users->{EMAIL}) {
        $ENV{HTTP_REFERER} =~ m/(https:\/\/[a-zA-Z0-9:\.\-]+)\//g;
        my $site = $1 || '';

        my $message = $html->tpl_show(
          _include('msgs_email_notify', 'Msgs'),
          {
            SITE       => $site,
            DATE       => $DATE,
            TIME       => $TIME,
            ID         => $Msgs->{INSERT_ID},
            LOGIN      => $FORM{LOGIN},
            UID        => $FORM{UID},
            SUBJECT    => $FORM{SUBJECT} . "//",
            STATUS     => $msg_status[ $FORM{STATE} ],
            MESSAGE    => $FORM{MESSAGE},
            ATTACHMENT => $FORM{FILE_UPLOAD}{filename}
          },
          { OUTPUT2RETURN => 1 }
        );

        sendmail("$conf{ADMIN_MAIL}", "$users->{EMAIL}", "$conf{WEB_TITLE} - $_NEW_MESSAGE", "$message", "$conf{MAIL_CHARSET}", undef, { MAIL_HEADER => ["X-ABillS-Msg-ID: $Msgs->{INSERT_ID}"] });
      }
    }

    if ($FORM{INNER_MSG} && $FORM{SURVEY_ID}) {
      $FORM{chg} = $Msgs->{MSG_ID};
      msgs_admin();
      return 0;
    }

    return 0 if ($attr->{SEND_ONLY} || $attr->{REGISTRATION});
  }

  my $a_list = $Msgs->admins_list({ AID => $admin->{AID} });

  my @A_CHAPTER = ();

  if ($Msgs->{TOTAL} > 0) {
    foreach my $line (@$a_list) {
      if ($line->[5] > 0) {
        push @A_CHAPTER, "$line->[5]" if ($line->[2] > 0);
      }
    }
  }

  if ($Msgs->{TOTAL} > 0) {
    if ($#A_CHAPTER == -1) {
      return 0;
    }
    else {
      $LIST_PARAMS{CHAPTERS} = join(', ', @A_CHAPTER);
    }
    $LIST_PARAMS{UID} = undef if (!$FORM{UID});
  }

  $Msgs->{CHAPTER_SEL} = $html->form_select(
    'CHAPTER',
    {
      SELECTED          => $Msgs->{CHAPTER},
      SEL_MULTI_ARRAY   => $Msgs->chapters_list({ CHAPTERS => $LIST_PARAMS{CHAPTERS} }),
      MULTI_ARRAY_KEY   => 0,
      MULTI_ARRAY_VALUE => 1,
      MAIN_MENU         => get_function_index('msgs_chapters'),
      MAIN_MENU_AGRV    => "chg=$Msgs->{CHAPTER}"
    }
  );

  $Msgs->{DATE} = $html->date_fld2(
    'DATE',
    {
      MONTHES   => \@MONTHES,
      FORM_NAME => (!$FORM{DV_WIZARD}) ? 'add_message' : 'user_form',
      WEEK_DAYS => \@WEEKDAYS
    }
  );
  $Msgs->{INNER_MSG} = ' checked';
  $Msgs->{PLAN_DATE} = $html->date_fld2(
    'PLAN_DATE',
    {
      NO_DEFAULT_DATE => 1,
      MONTHES         => \@MONTHES,
      FORM_NAME       => (!$FORM{DV_WIZARD}) ? 'add_message' : 'user_form',
      WEEK_DAYS       => \@WEEKDAYS,
      \DATE => ($Msgs->{PLAN_DATE} ne '0000-00-00') ? $Msgs->{PLAN_DATE} : ''
    }
  );

  #$Msgs->{PLAN_TIME}   = "";
  $Msgs->{DISPATCH_SEL} = $html->form_select(
    'DISPATCH_ID',
    {
      SELECTED => $Msgs->{DISPATCH_ID} || 0,
      SEL_MULTI_ARRAY => [ [ 0, '' ], @{ $Msgs->dispatch_list({ STATE => 0 }) } ],
      MULTI_ARRAY_KEY => 0,
      MULTI_ARRAY_VALUE => '2,1',
    }
  );

  $Msgs->{DISPATCH_PLAN_DATE} = $html->date_fld2('DISPATCH_PLAN_DATE', { NO_DEFAULT_DATE => 1, MONTHES => \@MONTHES, FORM_NAME => 'add_message', WEEK_DAYS => \@WEEKDAYS, DATE => $Msgs->{DISPATCH_PLAN_DATE} });

  if (!$FORM{UID}) {
    my $USER = sel_groups();

    $Msgs->{GROUP_SEND} = "<tr><td>$_GROUP:</td><td>$USER</td></tr>\n" . "<tr><td>$_SEND_MAIL:</td><td><input type=checkbox name=EMAIL value=1 checked></td></tr>\n";
  }

  $Msgs->{STATE_SEL} = $html->form_select(
    'STATE',
    {
      SELECTED     => $Msgs->{STATE},
      SEL_ARRAY    => \@msg_status,
      ARRAY_NUM_ID => 0
    }
  );

  $Msgs->{PRIORITY_SEL} = $html->form_select(
    'PRIORITY',
    {
      SELECTED     => 2,
      SEL_ARRAY    => \@priority,
      STYLE        => \@priority_colors,
      ARRAY_NUM_ID => 1
    }
  );

  $Msgs->{RESPOSIBLE} = $html->form_select(
    'RESPOSIBLE',
    {
      SELECTED => $Msgs->{RESPOSIBLE} || 0,
      SEL_MULTI_ARRAY => [ [ 0, $_ALL ], @{ $admin->list({ GIDS => $admins->{GIDS} }) } ],
      MULTI_ARRAY_KEY => 0,
      MULTI_ARRAY_VALUE => 1,
    }
  );

  $Msgs->{SURVEY_SEL} = msgs_survey_sel();

  if (in_array('Sms', \@MODULES)) {
    $Msgs->{EXTRA_PARAMS} = $html->tpl_show(_include('sms_check_form', 'Sms'), $Msgs, { OUTPUT2RETURN => 1 });
  }

  my $message_form = $html->tpl_show(_include('msgs_send_form', 'Msgs'), { %$attr, %FORM, %$Msgs }, { OUTPUT2RETURN => 1 });

  if ($attr->{OUTPUT2RETURN}) {
    return $message_form;
  }

  print $message_form;
}

#*******************************************************************
#
#*******************************************************************
sub msgs_admin {
  my @msg_status_all = ("$_OPEN", "$_CLOSED_UNSUCCESSFUL", "$_CLOSED_SUCCESSFUL", "$_IN_WORK", "$_NEW_MESSAGE", "$_HOLD_UP", "$_ANSWER_WAIT", "$_DELIGATED", "$_RESPOSIBLE",);

  @msg_status         = @msg_status_all;
  $Msgs->{ACTION}     = 'send';
  $Msgs->{LNG_ACTION} = $_SEND;

  #Get admin privileges
  my $a_list              = $Msgs->admins_list({ AID => $admin->{AID} });
  my %A_PRIVILEGES        = ();
  my %CHAPTERS_DELIGATION = ();
  foreach my $line (@$a_list) {
    if ($line->[5] > 0) {
      push @A_CHAPTER, "$line->[5]:$line->[3]";
      $CHAPTERS_DELIGATION{ $line->[5] } = $line->[3];
      $A_PRIVILEGES{ $line->[5] }        = $line->[2];
    }
  }

  msgs_chapters_menu();

  if ($FORM{deligate}) {
    $Msgs->message_change(
      {
        ID         => $FORM{deligate},
        DELIGATION => $FORM{level},
        ADMIN_READ => "0000-00-00 00:00:00"
      }
    );

    $html->message('info', $_INFO, "$_DELIGATED") if (!$Msgs->{errno});
  }
  elsif ($FORM{change}) {
    if ($FORM{STATE} > 0) {
      $FORM{DONE_DATE} = "$DATE" if ($FORM{STATE} == 2);
      $FORM{CLOSED_DATE} = "$DATE $TIME";
    }

    $Msgs->message_change({ %FORM, USER_READ => "0000-00-00 00:00:00" });
    $html->message('info', $_INFO, "$_CHANGED") if (!$Msgs->{errno});
    $FORM{chg} = $FORM{ID} if ($FORM{ID});
    goto MSG_LABEL;
  }
  elsif ($FORM{add_dispatch}) {
    my @ids = split(/, /, $FORM{del});
    for my $id (@ids) {
      $Msgs->message_change(
        {
          DISPATCH_ID => $FORM{DISPATCH_ID},
          ID          => $id
        }
      );
    }

    $html->message('info', $_INFO, "$_DISPATCH $_ADD # $FORM{IDS}") if (!$Msgs->{errno});
  }
  elsif ($FORM{reply}) {
    if ($FORM{RUN_TIME}) {
      my ($h, $min, $sec) = split(/:/, $FORM{RUN_TIME}, 3);
      $FORM{RUN_TIME} = $h * 60 * 60 + $min * 60 + $sec;
    }

    if ($FORM{REPLY_SUBJECT} || $FORM{REPLY_TEXT} || $FORM{FILE_UPLOAD} || $FORM{SURVEY_ID}) {
      $Msgs->message_reply_add(
        {
          %FORM,
          AID => $admin->{AID},
          IP  => $admin->{SESSION_IP},
        }
      );

      my $reply_id = $Msgs->{INSERT_ID};
      $FORM{REPLY_ID} = $reply_id;

      if (!$Msgs->{errno}) {

        #Add attachment
        if ($FORM{FILE_UPLOAD}{filename}) {
          $Msgs->attachment_add(
            {
              MSG_ID       => $Msgs->{INSERT_ID},
              CONTENT      => $FORM{FILE_UPLOAD}{Contents},
              FILESIZE     => $FORM{FILE_UPLOAD}{Size},
              FILENAME     => $FORM{FILE_UPLOAD}{filename},
              CONTENT_TYPE => $FORM{FILE_UPLOAD}{'Content-Type'},
              UID          => $FORM{UID},
              MESSAGE_TYPE => 1
            }
          );
        }
      }
    }

    %params = ();
    $params{CHAPTER} = $FORM{CHAPTER_ID} if ($FORM{CHAPTER_ID});
    $params{STATE} = $FORM{STATE} if (defined($FORM{STATE}) && $FORM{STATE} ne '');
    $params{STATE} = ($FORM{STATE} == 0 && !$FORM{MAIN_INNER_MESSAGE}) ? 6 : $FORM{STATE};
    $params{CLOSED_DATE} = "$DATE $TIME" if ($FORM{STATE} > 0);
    $params{DONE_DATE}   = $DATE         if ($FORM{STATE} > 1);
    $Msgs->message_change(
      {
        UID        => $LIST_PARAMS{UID},
        ID         => $FORM{ID},
        USER_READ  => "0000-00-00 00:00:00",
        ADMIN_READ => "$DATE $TIME",
        %params
      }
    );

    $FORM{chg} = $FORM{ID};
    $html->message('info', $_INFO, "$_REPLY") if (!$Msgs->{errno});

    $users->pi({ UID => $FORM{UID} });
    if ($users->{EMAIL} && !$FORM{INNER_MSG} && !$FORM{REPLY_INNER_MSG}) {
      $ENV{HTTP_REFERER} =~ m/(https:\/\/[a-zA-Z0-9:\.\-]+)\//g;
      my $site = $1 || '';
      my $message = $html->tpl_show(
        _include('msgs_email_notify', 'Msgs'),
        {
          SITE       => $site,
          DATE       => $DATE,
          TIME       => $TIME,
          LOGIN      => $Msgs->{LOGIN} || $FORM{LOGIN} || $ui->{LOGIN},
          UID        => $FORM{UID},
          ID         => "$Msgs->{ID} / $reply_id",
          SUBJECT    => $FORM{SUBJECT} . ' / ' . $FORM{REPLY_SUBJECT},
          STATUS     => $msg_status[ $FORM{STATE} ],
          MESSAGE    => $FORM{REPLY_TEXT},
          ATTACHMENT => $FORM{FILE_UPLOAD}{filename}
        },
        { OUTPUT2RETURN => 1 }
      );

      sendmail("$conf{ADMIN_MAIL}", "$users->{EMAIL}", "$conf{WEB_TITLE} - $_NEW_MESSAGE", "$message", "$conf{MAIL_CHARSET}", undef, { MAIL_HEADER => [ "X-ABillS-Msg-ID: $Msgs->{INSERT_ID}", "X-ABillS-REPLY-ID: $Msgs->{REPLY_ID}" ] });
    }

    #elsif($FORM{INNER_MSG} || $FORM{REPLY_INNER_MSG}) {
    msgs_notify_admins();

    # }

    goto MSG_LABEL;
  }
  elsif ($FORM{chg}) {
    MSG_LABEL:
    if ($FORM{reply_del} && $FORM{is_js_confirmed}) {
      if ($FORM{SURVEY_ID} && $FORM{CLEAN}) {
        $Msgs->survey_answer_del({ SURVEY_ID => $FORM{SURVEY_ID}, UID => $FORM{UID}, %FORM });
      }
      else {
        $Msgs->message_reply_del({ ID => $FORM{reply_del} });
      }
      $html->message('info', $_INFO, "$_DELETED [$FORM{reply_del}] ") if (!$Msgs->{errno});
    }

    my $status_bar = msgs_status_bar({ NO_UID => 1 });

    print $status_bar;

    $Msgs->message_info($FORM{chg});
    $Msgs->{ACTION}     = 'reply';
    $Msgs->{LNG_ACTION} = $_REPLY;
    $Msgs->{STATE_NAME} = $html->color_mark($msg_status[ $Msgs->{STATE} ], $style[ $Msgs->{STATE} ]);
    $Msgs->{STATE_SEL}  = $html->form_select(
      'STATE',
      {
        SELECTED => $Msgs->{STATE} || 0,
        SEL_ARRAY    => \@msg_status,
        STYLE        => \@style,
        ARRAY_NUM_ID => 0,
        EX_PARAMS    => "onchange='samechanged(this)'"
      },
    );

    $Msgs->{PRIORITY_TEXT} = $html->color_mark($priority[ $Msgs->{PRIORITY} ], $priority_colors[ $Msgs->{PRIORITY} ]);
    $Msgs->{PRIORITY_SEL} = $html->form_select(
      'PRIORITY',
      {
        SELECTED => $Msgs->{PRIORITY} || 2,
        SEL_ARRAY    => \@priority,
        STYLE        => \@priority_colors,
        ARRAY_NUM_ID => 1
      }
    );

    $Msgs->{DELIGATED}      = $CHAPTERS_DELIGATION{ $Msgs->{CHAPTER} } + 1;
    $Msgs->{DELIGATED_DOWN} = 0;

    $Msgs->{CHAPTERS_SEL} = $html->form_select(
      'CHAPTER_ID',
      {
        SELECTED          => '',
        SEL_MULTI_ARRAY   => [ [ '', '' ], @{ $Msgs->chapters_list({ CHAPTERS => join(',', keys %A_PRIVILEGES) }) } ],
        MULTI_ARRAY_KEY   => 0,
        MULTI_ARRAY_VALUE => 1,
        MAIN_MENU         => get_function_index('msgs_chapters'),
        MAIN_MENU_AGRV    => "chg=$Msgs->{CHAPTER}"
      }
    );

    $Msgs->{PLAN_DATE} = $html->date_fld2(
      'PLAN_DATE',
      {
        NO_DEFAULT_DATE => 1,
        MONTHES         => \@MONTHES,
        FORM_NAME       => 'add_message',
        WEEK_DAYS       => \@WEEKDAYS,
        DATE            => ($Msgs->{PLAN_DATE} ne '0000-00-00') ? $Msgs->{PLAN_DATE} : ''
      }
    );
    $Msgs->{RESPOSIBLE} = $html->form_select(
      'RESPOSIBLE',
      {
        SELECTED => $Msgs->{RESPOSIBLE} || 0,
        SEL_MULTI_ARRAY => [ [ 0, $_ALL ], @{ $admin->list({ GIDS => $admins->{GIDS} }) } ],
        MULTI_ARRAY_KEY => 0,
        MULTI_ARRAY_VALUE => 1,
      }
    );

    $Msgs->{DISPATCH_SEL} = $html->form_select(
      'DISPATCH_ID',
      {
        SELECTED => $Msgs->{DISPATCH_ID} || 0,
        SEL_MULTI_ARRAY => [ [ 0, '' ], @{ $Msgs->dispatch_list({ STATE => 0 }) } ],
        MULTI_ARRAY_KEY => 0,
        MULTI_ARRAY_VALUE => 1,
      }
    );

    $users->pi({ UID => $FORM{UID} });

    $Msgs->{MSG_CLOSED_DATE} = $html->form_input('MSG_CLOSED_DATE', "");
    $Msgs->{INNER_MSG_TEXT}  = $bool_vals[ $Msgs->{INNER_MSG} ];
    $Msgs->{EXT_INFO}        = $html->tpl_show(_include('msgs_managment', 'Msgs'), { %$users, %$Msgs }, { OUTPUT2RETURN => 1 });

    #$Msgs->{THREADS} = $html->button($Msgs->{SUBJECT}. " ($_DATE: $Msgs->{DATE}) ", "");
    #if ($Msgs->{REPLIES_COUNT} > 0) {
    #	foreach my $line (@{ $Msgs->{REPLIES_COUNT} }) {
    #	 	my ($id, $caption, $date, $person)=split(/|/, $line);
    #	 }
    # }

    my $list = $Msgs->messages_reply_list({ MSG_ID => $Msgs->{ID} });

    my $reply = '';
    if ($Msgs->{TOTAL} == 0) {
      $reply = $Msgs->{MESSAGE};
    }

    if ($Msgs->{SURVEY_ID}) {
      $Msgs->{REPLY} .= msgs_survey_show({ SURVEY_ID => $Msgs->{SURVEY_ID}, MSG_ID => $Msgs->{ID}, MAIN_MSG => 1 });
    }

    foreach my $line (@$list) {
      if ($line->[14]) {
        $FORM{REPLY_ID} = $line->[0];
        $Msgs->{REPLY} .= msgs_survey_show({ SURVEY_ID => $line->[14], REPLY_ID => $line->[0] });
        $Msgs->{SURVEY_ID} = undef;
        next if ($Msgs->{TOTAL});
      }

      if ($FORM{QUOTING} && $FORM{QUOTING} == $line->[0]) {
        $reply = $line->[2];
      }

      $line->[2] = convert($line->[2], { text2html => 1 });
      $line->[2] =~ s/> (.+)/<font color='$_COLORS[8]'> > $1 <\/font>/g;
      $line->[2] =~ s/&gt; (.+)/<font color='$_COLORS[8]'> > $1 <\/font>/g;
      my $msg_color = 'odd';

      if ($line->[13]) {
        $msg_color = 'title_color';
      }
      elsif ($line->[12] > 0) {
        $msg_color = 'even';
      }

      $Msgs->{REPLY} .= $html->tpl_show(
        _include('msgs_reply_show', 'Msgs'),
        {
          REPLY_ID => $line->[0],
          DATE     => $line->[1],
          CAPTION  => convert($line->[5], { text2html => 1 }),
          PERSON   => "$line->[3]" . (($line->[12]) ? " ($_ADMIN)" . (($line->[13]) ? " $_INNER" : '') : ""),
          MESSAGE  => $line->[2],
          QUOTING  => $html->button($_QUOTING, "&index=$index&chg=$FORM{chg}&UID=$FORM{UID}&QUOTING=$line->[0]" . (($line->[13]) ? "&INNER_MSG=1" : ''), { BUTTON => 1 }),
          DELETE => $html->button($_DEL, "&index=$index&chg=$FORM{chg}&reply_del=$line->[0]&UID=$Msgs->{UID}", { MESSAGE => "$_DEL $line->[0]?", BUTTON => 1 }),
          ATTACHMENT => ($line->[7]) ? "$_ATTACHMENT: " . $html->button("$line->[7]", "qindex=$index&ATTACHMENT=$line->[9]", { TARGET => '_new' }) . " ($_SIZE: " . int2byte($line->[8]) . ')' : '',
          COLOR => $msg_color,
          RUN_TIME => ($line->[11] ne '00:00:00') ? "$_RUN_TIME: $line->[11]" : '',
        },
        { OUTPUT2RETURN => 1 },
      );
    }
    my $run_time = '00:00:00';
    if ($reply ne '') {
      $reply =~ s/^/> /g;
      $reply =~ s/\n/> /g;
    }

    if (!$Msgs->{ACTIVE_SURWEY} && ($A_PRIVILEGES{ $Msgs->{CHAPTER} } || scalar keys %A_PRIVILEGES == 0)) {
      my $survey_sel = msgs_survey_sel();
      $Msgs->{REPLY} .= $html->tpl_show(
        _include('msgs_reply', 'Msgs'),
        {
          %$Msgs,
          REPLY_TEXT     => "",
          QUOTING        => "$reply",
          RUN_TIME       => "$_RUN_TIME ($_MINS):" . $html->form_input('RUN_TIME', "$run_time", { EX_PARAMS => " STYLE='background-color: $_COLORS[3]' DISABLED size=9" }),
          MAIN_INNER_MSG => $Msgs->{INNER_MSG},
          INNER_MSG => ($FORM{INNER_MSG}) ? ' checked ' : '',
          SURVEY_SEL => $survey_sel
        },
        { OUTPUT2RETURN => 1 }
      );
    }

    $Msgs->{MESSAGE} = convert($Msgs->{MESSAGE}, { text2html => 1, SHOW_URL => 1 });
    $Msgs->{SUBJECT} = convert($Msgs->{SUBJECT}, { text2html => 1 });

    if ($Msgs->{FILENAME}) {
      $Msgs->{ATTACHMENT} = "$_ATTACHMENT: " . $html->button("$Msgs->{FILENAME}", "qindex=$index&ATTACHMENT=$Msgs->{ATTACHMENT_ID}", { TARGET => '_new' }) . " ($_SIZE: " . int2byte($Msgs->{FILESIZE}) . ')';
    }

    $html->tpl_show(_include('msgs_show', 'Msgs'), $Msgs);

    if ($Msgs->{RESPOSIBLE} == 0 || $Msgs->{RESPOSIBLE} == $admin->{AID}) {
      $Msgs->message_change(
        {
          UID        => $Msgs->{UID},
          ID         => $FORM{chg},
          ADMIN_READ => "$DATE $TIME",
        }
      );
    }

    return 0;
  }
  elsif ($FORM{ATTACHMENT}) {
    $Msgs->attachment_info({ ID => $FORM{ATTACHMENT} });
    print "Content-Type: $Msgs->{CONTENT_TYPE}; filename=\"$Msgs->{FILENAME}\"\n" . "Content-Disposition: attachment; filename=\"$Msgs->{FILENAME}\"; size=$Msgs->{FILESIZE}" . "\n\n";
    print "$Msgs->{CONTENT}";
    return 0;
  }
  elsif ($FORM{del} && $FORM{is_js_confirmed}) {
    if ($conf{MSGS_REDIRECT_FILTER_ADD}) {
      require "Dv.pm";
      $Dv = Dv->new($db, $admin, \%conf);
      $Dv->change({ UID => $FORM{UID}, FILTER_ID => '' });
    }

    $Msgs->message_del({ ID => $FORM{del}, UID => $UID });
    $html->message('info', $_INFO, "$_DELETED") if (!$Msgs->{errno});
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }

  if (scalar keys %CHAPTERS_DELIGATION > 0) {
    $LIST_PARAMS{CHAPTERS_DELIGATION} = \%CHAPTERS_DELIGATION;
    $LIST_PARAMS{PRIVILEGES}          = \%A_PRIVILEGES;
    $LIST_PARAMS{UID}                 = undef if (!$FORM{UID});
  }

  if (!$FORM{UID}) {
    $Msgs->{STATE_SEL} = $html->form_select(
      'STATE',
      {
        SELECTED    => $FORM{STATE},
        SEL_OPTIONS => { '' => $_ALL },
        STYLE       => \@style,
        SEL_HASH    => {
          $msg_status[0] => {
            0             => $msg_status[0],
            3             => $msg_status[3],
            4             => $msg_status[4],
            5             => $msg_status[5],
            6             => $msg_status[6],
            7             => $msg_status[7],
            '0;3;4;5;6;7' => $_ACTIVE,
          },
          $msg_status[1] => { 1 => $msg_status[1] },
          $msg_status[2] => { 2 => $msg_status[2] },
        },
        ARRAY_NUM_ID => 0
      }
    );

    $Msgs->{PRIORITY_SEL} = $html->form_select(
      'PRIORITY',
      {
        SELECTED => $FORM{PRIORITY} || 5,
        SEL_OPTIONS  => { '' => $_ALL },
        SEL_ARRAY    => [@priority],
        STYLE        => \@priority_colors,
        ARRAY_NUM_ID => 1
      }
    );

    $Msgs->{CHAPTER_SEL} = $html->form_select(
      'CHAPTER',
      {
        SELECTED => $FORM{CHAPTER} || 0,    #$Msgs->{CHAPTER} || $FORM{CHAPTER} || undef,
        SEL_MULTI_ARRAY => [ [ 0, "$_ALL" ], @{ $Msgs->chapters_list({ CHAPTERS => join(',', keys %A_PRIVILEGES) }) } ],
        MULTI_ARRAY_KEY => 0,
        MULTI_ARRAY_VALUE => 1,
        MAIN_MENU         => get_function_index('msgs_chapters'),
        MAIN_MENU_AGRV    => "chg=$Msgs->{CHAPTER}"
      }
    );

    $Msgs->{PLAN_DATE} = "0000-00-00";
    $Msgs->{PLAN_TIME} = "00:00:00";
    $Msgs->{MSG_ID}    = undef;
    form_search({ SEARCH_FORM => $html->tpl_show(_include('msgs_search', 'Msgs'), { %$Msgs, %FORM }, { OUTPUT2RETURN => 1 }) });
  }
  else {
    msgs_admin_add();
  }

  $LIST_PARAMS{STATE}    = undef if ($FORM{STATE} == 3);
  $LIST_PARAMS{PRIORITY} = undef if ($FORM{PRIORITY} == 5);

  my $status_bar = msgs_status_bar();
  my $list = $Msgs->messages_list({ %LIST_PARAMS, DESC => (!$FORM{sort}) ? 'DESC' : $FORM{desc} });

  my $table = $html->table(
    {
      width   => '100%',
      caption => "$_MESSAGES",
      title   => [ '#', "$_USER", "$_SUBJECT", "$_CHAPTERS", "$_DATE", "$_STATUS", "$_CLOSED", "$_RESPOSIBLE", "$_ADMIN", "$_PRIORITY", "$_EXECUTION", "-", "-" ],
      cols_align => [ 'right', 'left', 'left', 'right', 'right', 'left', 'center', 'right', 'left', 'center:noprint', 'center:noprint' ],
      qs         => $pages_qs,
      pages      => $Msgs->{TOTAL},
      ID         => 'MSGS_LIST',
      header     => (
        (scalar keys %CHAPTERS_DELIGATION == 0)
        ? "<script language=\"JavaScript\" type=\"text/javascript\">
<!-- 
function CheckAllINBOX() {
  for (var i = 0; i < document.users_list.elements.length; i++) {
    if(document.users_list.elements[i].type == 'checkbox' && document.users_list.elements[i].name == 'del'){
      document.users_list.elements[i].checked =         !(document.users_list.elements[i].checked);
    }
  }
}
//-->
</script>\n<a href=\"javascript:void(0)\" onClick=\"CheckAllINBOX();\">$_SELECT_ALL</a>\n"
        : ''
      )
      . $status_bar
    }
  );

  foreach my $line (@$list) {
    my $state = ($line->[5] == 0) ? $html->b($msg_status[ $line->[5] ]) : $msg_status[ $line->[5] ];

    $state .= ' <img src="../img/red_dot.gif" border="0" alt="No reply"/>' if ($line->[17] eq '0000-00-00 00:00:00');
    if ($line->[22] > 0) {
      if ($CHAPTERS_DELIGATION{ $line->[19] } == $line->[21]) {
        $state .= ' <img src="../img/delivered2.png" border="0" alt="' . $_DELIVERED . '"/>';
      }
      else {
        $state .= ' <img src="../img/delivered1.png" border="0" alt="' . $_DELIVERED . '"/>';
      }
    }
    my $priority = $html->color_mark($priority[ $line->[9] ], $priority_colors[ $line->[9] ]);

    $table->addrow(
      $line->[0] . (($A_PRIVILEGES{ $line->[19] } > 2 || scalar keys %CHAPTERS_DELIGATION == 0) ? $html->form_input('del', "$line->[0]", { TYPE => 'checkbox' }) : '') . (($line->[22]) ? $html->b("($_INNER_MSGS_CHAR)") : ""),
      ($line->[12] > 0) ? $html->button($line->[1], "index=11&UID=$line->[12]") : $line->[1],
      $html->button((($line->[2]) ? "$line->[2]" : $_NO_SUBJECT), "index=$index&UID=$line->[12]&chg=$line->[0]"),
      $line->[3],
      $line->[4],
      $state,
      $line->[6],
      $line->[7],
      $line->[8],
      $priority,
      $line->[10],
      $html->button("$_SHOW", "index=$index&chg=$line->[0]&UID=$line->[12]", { CLASS => 'show' }),
      (($A_PRIVILEGES{ $line->[19] } > 2 || $#A_CHAPTER == -1) ? $html->button($_DEL, "index=$index&del=$line->[0]$pages_qs", { MESSAGE => "$_DEL '$line->[0]' ?", CLASS => 'del' }) : '')
    );
  }

  my $total_msgs = $Msgs->{TOTAL};

  my $dispatch = msgs_dispatch_sel();

  print $html->form_main(
    {
      CONTENT => $table->show() . $dispatch,
      HIDDEN  => {
        index           => "$index",
        UID             => $FORM{UID},
        is_js_confirmed => 1,
        STATE           => $FORM{STATE}
      },
      SUBMIT => ($#A_CHAPTER == -1) ? { delete => $_DEL } : undef,
      NAME => 'users_list'
    }
  );

  $table = $html->table(
    {
      width      => '100%',
      cols_align => [ 'right', 'right' ],
      rows       => [ [ " $_TOTAL: ", $html->b($total_msgs) ] ]
    }
  );
  print $table->show();
}

#**********************************************************
# msgs_dispatch_sel();
#**********************************************************
sub msgs_dispatch_sel {
  my $table = $html->table(
    {
      width      => '100%',
      caption    => "$_DISPATCHES",
      cols_align => [ 'center', 'center', 'center' ],
      rows       => [
        [
          "$_DISPATCH:",
          $html->form_select(
            'DISPATCH_ID',
            {
              SELECTED          => $Msgs->{DISPATCH_ID},
              SEL_MULTI_ARRAY   => [ @{ $Msgs->dispatch_list({ STATE => 0 }) } ],
              MULTI_ARRAY_KEY   => 0,
              MULTI_ARRAY_VALUE => 1,
              MAIN_MENU         => get_function_index('msgs_dispatch'),
              MAIN_MENU_AGRV    => "chg=$Msgs->{DISPATCH_ID}"

            }
          ),
          $html->form_input('add_dispatch', "$_ADD", { TYPE => 'submit', OUTPUT2RETURN => 1 })
        ]
      ]
    }
  );

  return $table->show();
}

#**********************************************************
#
#**********************************************************
sub msgs_status_bar {
  my ($attr) = @_;

  if (!defined($FORM{STATE}) && !$FORM{ALL_MSGS} && !$FORM{ALL_OPENED}) {
    $FORM{STATE} = 4;
  }

  if ($attr->{NO_UID}) {
    $pages_qs =~ s/UID=\d+//;
  }

  my $i          = 0;
  my $status_bar = '';
  $pages_qs =~ s/\&ALL_OPENED=1|\&ALL_MSGS=1//;
  $pages_qs =~ s/STATE=\d+//;
  $pages_qs .= "&CHAPTER=$FORM{CHAPTER}" if ($FORM{CHAPTER});

  foreach my $name (@msg_status) {
    if (defined($FORM{STATE}) && $FORM{STATE} == $i && $FORM{STATE} ne '') {
      $LIST_PARAMS{STATE} = $FORM{STATE};
      $status_bar .= ' ' . $html->b($name);
    }
    else {
      $status_bar .= ' ' . $html->button("$name", "index=$index&STATE=$i$pages_qs", { BUTTON => 1 });
    }
    $i++;
  }

  if ($FORM{CHAPTER}) {
    $LIST_PARAMS{CHAPTER} = $FORM{CHAPTER};
  }

  if ($FORM{ALL_OPENED} || $FORM{STATE} eq '0;3;4;5;6;7') {
    $status_bar = $html->button("$_ALL", "index=$index&ALL_MSGS=1$pages_qs", { BUTTON => 1 }) . ' ' . $html->b("$_ACTIVE") . $status_bar;
    $LIST_PARAMS{STATE} = "0;3;4;5;6;7";
    $pages_qs .= "&ALL_OPENED=1";
  }
  elsif ($FORM{ALL_MSGS} || $FORM{STATE} eq '') {
    $status_bar = $html->b($_ALL) . ' ' . $html->button("$_ACTIVE", "index=$index&ALL_OPENED=1$pages_qs", { BUTTON => 1 }) . $status_bar;
    $pages_qs .= "&ALL_MSGS=1";
  }
  else {
    $status_bar = $html->button("$_ALL", "index=$index&ALL_MSGS=1$pages_qs", { BUTTON => 1 }) . ' ' . $html->button("$_ACTIVE", "index=$index&ALL_OPENED=1$pages_qs", { BUTTON => 1 }) . $status_bar;
    $pages_qs .= "&STATE=$FORM{STATE}";
  }

  return $status_bar;
}

#**********************************************************
#
#**********************************************************
sub msgs_notify_admins {
  my ($attr) = @_;

  my $list = $Msgs->admins_list(
    {
      EMAIL_NOTIFY => 1,
      CHAPTER_ID   => $FORM{CHAPTER}
    }
  );

  foreach my $line (@$list) {
    next if (!$line->[7]);
    $ENV{HTTP_REFERER} =~ m/(https:\/\/[a-zA-Z0-9:\.\-]+)\//g;
    my $site = $1 || '';

    $RESPOSIBLE = ($FORM{RESPOSIBLE} && $FORM{RESPOSIBLE} eq $line->[4]) ? $_YES : $_NO;

    my $message = $html->tpl_show(
      _include('msgs_email_notify', 'Msgs'),
      {
        SITE  => $site,
        LOGIN => $Msgs->{LOGIN} || $FORM{LOGIN} || $ui->{LOGIN} || $user->{LOGIN},
        ADMIN => ($FORM{INNER_MSG}) ? "$_ADMIN:  $admin->{A_LOGIN} ($admin->{A_FIO})" : '',
        UID => $Msgs->{UID} || $FORM{UID} || $LIST_PARAMS{UID},
        DATE       => $DATE,
        TIME       => $TIME,
        ID         => "$Msgs->{INSERT_ID}/$Msgs->{REPLY_ID}",
        RESPOSIBLE => $RESPOSIBLE,
        SUBJECT    => $FORM{SUBJECT} . ' / ' . $FORM{REPLY_SUBJECT},
        STATUS     => $msg_status[ $FORM{STATE} ],
        MESSAGE    => $FORM{MESSAGE} || $FORM{REPLY_TEXT} || $Msgs->{MESSAGE},
        ATTACHMENT => $FORM{FILE_UPLOAD}{filename}
      },
      { OUTPUT2RETURN => 1 }
    );

    sendmail("$conf{ADMIN_MAIL}", "$line->[7]", "$conf{WEB_TITLE} - $_NEW_MESSAGE", "$message", "$conf{MAIL_CHARSET}", undef, { MAIL_HEADER => [ "X-ABillS-Msg-ID: $Msgs->{INSERT_ID}", "X-ABillS-Reply-ID: $Msgs->{REPLY_ID}" ] });
  }
}

#*******************************************************************
#
#*******************************************************************
sub msgs_user {
  my @msg_status_all = ("$_OPEN", "$_CLOSED_UNSUCCESSFUL", "$_CLOSED_SUCCESSFUL", "$_IN_WORK", "$_NEW_MESSAGE", "$_HOLD_UP", "$_ANSWER_WAIT",);

  $Msgs->{STATE_SEL} = $html->form_select(
    'STATE',
    {
      SELECTED => $FORM{STATE} || 0,
      SEL_ARRAY    => \@msg_status,
      STYLE        => \@style,
      ARRAY_NUM_ID => 1
    }
  );

  $Msgs->{PRIORITY_SEL} = $html->form_select(
    'PRIORITY',
    {
      SELECTED     => 2,
      SEL_ARRAY    => \@priority,
      STYLE        => \@priority_colors,
      ARRAY_NUM_ID => 1
    }
  );

  if ($FORM{send}) {
    $Msgs->message_add(
      {
        UID       => $user->{UID},
        STATE     => ($FORM{STATE}) ? $FORM{STATE} : 0,
        USER_READ => "$DATE $TIME",
        IP        => $ENV{'REMOTE_ADDR'},
        %FORM
      }
    );

    if (!$Msgs->{errno}) {

      #Add attachment
      if ($FORM{FILE_UPLOAD}{filename}) {
        $Msgs->attachment_add(
          {
            MSG_ID       => $Msgs->{INSERT_ID},
            CONTENT      => $FORM{FILE_UPLOAD}{Contents},
            FILESIZE     => $FORM{FILE_UPLOAD}{Size},
            FILENAME     => $FORM{FILE_UPLOAD}{filename},
            CONTENT_TYPE => $FORM{FILE_UPLOAD}{'Content-Type'},
            UID          => $user->{UID}
          }
        );
      }
      $html->message('info', $_INFO, "$_MESSSAGE # $Msgs->{MSG_ID}. $_MSG_SENDED ");
      msgs_notify_admins();
    }
  }
  elsif ($FORM{ID} || $Msgs->{LAST_ID}) {
    if ($FORM{reply}) {
      my %params = ();
      $params{CLOSED_DATE} = $DATE if ($FORM{STATE} > 0);
      $params{DONE_DATE}   = $DATE if ($FORM{STATE} > 1);

      $Msgs->message_change(
        {
          UID        => $LIST_PARAMS{UID},
          ID         => $FORM{ID},
          ADMIN_READ => "0000-00-00 00:00:00",
          STATE      => $FORM{STATE},
          %params
        }
      );
      if ($FORM{REPLY_SUBJECT} || $FORM{REPLY_TEXT} || $FORM{FILE_UPLOAD} || $FORM{SURVEY_ID}) {
        $Msgs->message_reply_add(
          {
            %FORM,
            AID => 0,
            IP  => $admin->{SESSION_IP},
            UID => $LIST_PARAMS{UID}
          }
        );

        if (!$Msgs->{errno}) {

          #Add attachment
          if ($FORM{FILE_UPLOAD}{filename}) {
            $Msgs->attachment_add(
              {
                MSG_ID       => $Msgs->{INSERT_ID},
                CONTENT      => $FORM{FILE_UPLOAD}{Contents},
                FILESIZE     => $FORM{FILE_UPLOAD}{Size},
                FILENAME     => $FORM{FILE_UPLOAD}{filename},
                CONTENT_TYPE => $FORM{FILE_UPLOAD}{'Content-Type'},
                UID          => $user->{UID},
                MESSAGE_TYPE => 1
              }
            );
          }
        }
        $html->message('info', $_INFO, "$_REPLY");
        msgs_notify_admins();
      }
    }
    elsif ($FORM{change}) {
      $Msgs->message_change(
        {
          UID        => $LIST_PARAMS{UID},
          ID         => $FORM{ID},
          ADMIN_READ => "0000-00-00 00:00:00",
          STATE      => $FORM{STATE}
        }
      );
    }

    $FORM{ID} = $Msgs->{LAST_ID} if ($Msgs->{LAST_ID});
    $Msgs->message_info($FORM{ID}, { UID => $LIST_PARAMS{UID} });

    $Msgs->{ACTION}        = 'reply';
    $Msgs->{LNG_ACTION}    = $_REPLY;
    $Msgs->{STATE_NAME}    = ($Msgs->{STATE} == 6) ? "<blink>$msg_status_all[$Msgs->{STATE}]</blink>" : (($Msgs->{STATE} == 0) ? $html->color_mark($msg_status_all[ $Msgs->{STATE} ], $_COLORS[8]) : $msg_status_all[ $Msgs->{STATE} ]);
    $Msgs->{PRIORITY_TEXT} = $html->color_mark($priority[ $Msgs->{PRIORITY} ], $priority_colors[ $Msgs->{PRIORITY} ]);

    if ($Msgs->{ID} && $Msgs->{ID} > 0) {
      my $list = $Msgs->messages_reply_list({ MSG_ID => $Msgs->{ID}, INNER_MSG => 0 });
      my $reply = '';

      if ($Msgs->{SURVEY_ID}) {
        $Msgs->{REPLY} .= msgs_survey_show({ SURVEY_ID => $Msgs->{SURVEY_ID}, MSG_ID => $Msgs->{ID} });
      }

      foreach my $line (@$list) {
        $FORM{REPLY_ID} = $line->[0];
        if ($line->[14]) {
          $Msgs->{REPLY} .= msgs_survey_show({ SURVEY_ID => $line->[14], REPLY_ID => $line->[0] });
        }
        else {
          if ($FORM{QUOTING} && $FORM{QUOTING} == $line->[0]) {
            $reply = $line->[2];
          }
          $line->[2] = convert($line->[2], { text2html => 1 });
          $line->[2] =~ s/> (.+)/<font color='$_COLORS[8]'> > $1 <\/font>/g;
          $line->[2] =~ s/&gt; (.+)/<font color='$_COLORS[8]'> > $1 <\/font>/g;

          $Msgs->{REPLY} .= $html->tpl_show(
            _include('msgs_reply_show', 'Msgs'),
            {
              REPLY_ID   => $line->[0],
              DATE       => $line->[1],
              CAPTION    => convert($line->[5], { text2html => 1 }),
              PERSON     => $line->[3],
              MESSAGE    => $line->[2],
              COLOR      => ($line->[12] == 0) ? 'even' : 'odd',
              QUOTING    => $html->button($_QUOTING, "index=$index&QUOTING=$line->[0]&ID=$FORM{ID}&sid=$sid", { BUTTON => 1 }),
              ATTACHMENT => ($line->[7]) ? "$_ATTACHMENT: " . $html->button("$line->[7]", "qindex=$index&ATTACHMENT=$line->[9]", { TARGET => '_new' }) . " ($_SIZE:   " . int2byte($line->[8]) . ')' : '',
            },
            { OUTPUT2RETURN => 1 }
          );

          if ($reply ne '') {
            $reply =~ s/^/> /g;
            $reply =~ s/\n/> /g;
          }
        }
      }

      if (!$Msgs->{ACTIVE_SURWEY} && ($Msgs->{STATE} < 1 || $Msgs->{STATE} == 6)) {
        $Msgs->{REPLY} .= $html->tpl_show(_include('msgs_client_reply', 'Msgs'), { %$Msgs, REPLY_TEXT => $reply }, { OUTPUT2RETURN => 1 });
      }
      else {
        $html->message('info', $_INFO, "$msg_status[$Msgs->{STATE}] $_DATE: $Msgs->{CLOSED_DATE}");
      }

      $Msgs->{MESSAGE} = convert($Msgs->{MESSAGE}, { text2html => 1, SHOW_URL => 1 });
      $Msgs->{SUBJECT} = convert($Msgs->{SUBJECT}, { text2html => 1 });

      if ($Msgs->{FILENAME}) {
        $Msgs->{ATTACHMENT} = "$_ATTACHMENT: " . $html->button("$Msgs->{FILENAME}", "qindex=$index&sid=$sid&ATTACHMENT=$Msgs->{ATTACHMENT_ID}", { TARGET => '_new' }) . " ($_SIZE: " . int2byte($Msgs->{FILESIZE}) . ')';
      }

      $html->tpl_show(_include('msgs_show', 'Msgs'), $Msgs);
      %params = ();
      $params{CLOSED_DATE} = $DATE if ($state > 0);
      $params{DONE_DATE}   = $DATE if ($state > 1);

      $Msgs->message_change(
        {
          UID       => $LIST_PARAMS{UID},
          ID        => $FORM{ID},
          USER_READ => "$DATE $TIME",
          %params
        }
      );

      if ($conf{MSGS_REDIRECT_FILTER_DEL}) {
        require "Dv.pm";
        my $Dv = Dv->new($db, $admin, \%conf);
        $Dv->change({ UID => $LIST_PARAMS{UID}, FILTER_ID => '' });
        if ($conf{MSGS_REDIRECT_FILTER_DEL} =~ /EXEC:(.+)/) {
          my $cmd = $1;
          $cmd =~ s/\%IP\%/$ENV{REMOTE_ADDR}/g;
          my $res = `$cmd`;
        }
      }
    }

    #return 0;
  }
  elsif ($FORM{ATTACHMENT}) {
    $Msgs->attachment_info(
      {
        ID  => $FORM{ATTACHMENT},
        UID => $user->{UID}
      }
    );

    if ($Msgs->{TOTAL} == 0) {
      print "Content-Type: text/html\n\n";
      print "Error: Can't find attachment\n";
      return 0;
    }

    print "Content-Type: $Msgs->{CONTENT_TYPE}; filename=\"$Msgs->{FILENAME}\"\n" . "Content-Disposition: attachment; filename=\"$Msgs->{FILENAME}\"; size=$Msgs->{FILESIZE}\n\n";
    print "$Msgs->{CONTENT}";
    return 0;
  }
  else {
    $Msgs->{CHAPTER_SEL} = $html->form_select(
      'CHAPTER',
      {
        SELECTED          => $Msgs->{CHAPTER},
        SEL_MULTI_ARRAY   => $Msgs->chapters_list({ INNER_CHAPTER => 0 }),
        MULTI_ARRAY_KEY   => 0,
        MULTI_ARRAY_VALUE => 1,
        MAIN_MENU         => get_function_index('msgs_chapters'),
        MAIN_MENU_AGRV    => "chg=$Msgs->{CHAPTER}"
      }
    );

    $html->tpl_show(_include('msgs_send_form_user', 'Msgs'), $Msgs);
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }

  push @msg_status, $_IN_WORK;
  $LIST_PARAMS{SORT}      = '5 DESC';                          # '11, 5 DESC';
  $LIST_PARAMS{INNER_MSG} = 0;
  $LIST_PARAMS{STATE}     = undef if ($FORM{STATE} == 3);
  $LIST_PARAMS{PRIORITY}  = undef if ($FORM{PRIORITY} == 5);

  if (!defined($FORM{STATE}) && !$FORM{ALL_MSGS}) {
    $FORM{ALL_OPENED} = 1;
  }

  $pages_qs =~ s/\&ALL_OPENED=1|\&ALL_MSGS=1//;
  $pages_qs =~ s/STATE=\d+//;
  my $i = 0;
  foreach my $name (@msg_status) {
    if (defined($FORM{STATE}) && $FORM{STATE} == $i && $FORM{STATE} ne '') {
      $LIST_PARAMS{STATE} = ($FORM{STATE} == 0) ? '0;6' : $FORM{STATE};
      $status_bar .= ' ' . $html->b($name);
    }
    else {
      $status_bar .= ' ' . $html->button("$name", "index=$index&STATE=$i$pages_qs");
    }
    $i++;
  }

  #======================
  if ($FORM{ALL_OPENED} || $FORM{STATE} eq '0;3;4;5;6;7') {
    $status_bar = $html->button("$_ALL", "index=$index&ALL_MSGS=1$pages_qs") . ' ' . $html->b("$_ACTIVE") . $status_bar;
    $LIST_PARAMS{STATE} = "0;3;4;5;6;7";
    $pages_qs .= "&ALL_OPENED=1";
  }
  elsif ($FORM{ALL_MSGS} || $FORM{STATE} eq '') {
    $status_bar = $html->b($_ALL) . ' ' . $html->button("$_ACTIVE", "index=$index&ALL_OPENED=1$pages_qs") . $status_bar;
    $pages_qs .= "&ALL_MSGS=1";
  }
  else {
    $status_bar = $html->button("$_ALL", "index=$index&ALL_MSGS=1$pages_qs") . ' ' . $html->button("$_ACTIVE", "index=$index&ALL_OPENED=1$pages_qs") . $status_bar;
    $pages_qs .= "&STATE=$FORM{STATE}";
  }

  #===================================
  my $list  = $Msgs->messages_list({%LIST_PARAMS});
  my $table = $html->table(
    {
      width       => '100%',
      caption     => "$_MESSAGES",
      title_plain => [ "$_SUBJECT", "$_CHAPTERS", "$_DATE", "$_STATUS", "-" ],
      cols_align  => [ 'left', 'left', 'left', 'right', 'right', 'left', 'center', 'center' ],
      qs          => $pages_qs,
      pages       => $Msgs->{TOTAL},
      ID          => 'MSGS_LIST',
      header      => $status_bar
    }
  );

  foreach my $line (@$list) {
    $table->{rowcolor} = ($line->[0] == $FORM{ID}) ? 'row_active' : undef;

    $table->addrow(
      ($line->[15] ne '0000-00-00 00:00:00') ? $html->button((($line->[2]) ? "$line->[2]" : $_NO_SUBJECT), "index=$index&ID=$line->[0]&sid=$sid") : $html->button($html->b((($line->[2]) ? "$line->[2]" : $_NO_SUBJECT)), "index=$index&ID=$line->[0]&sid=$sid"),
      $line->[3], $line->[4],
      ($line->[5] == 6) ? "<blink>$msg_status_all[$line->[5]]</blink>" : $html->color_mark($msg_status_all[ $line->[5] ], $msgs_status_colors[ $line->[5] ]),
      $html->button($_SHOW, "index=$index&ID=$line->[0]&sid=$sid", { CLASS => 'show' })
    );
  }

  print $table->show();

  $Msgs->{TOTAL_MSG} = $Msgs->{TOTAL};
  my %SHOW_PARAMS = (ADMIN_READ => '0000-00-00 00:00:00',);

  $Msgs->messages_new({%SHOW_PARAMS});
  $table = $html->table(
    {
      width      => '100%',
      cols_align => [ 'left', 'right' ],
      rows       => [
        [
          "$_TOTAL: " . $html->b($Msgs->{TOTAL_MSG}),
          $html->color_mark("$_IN_WORK: " . $html->b($Msgs->{UNREAD}),              $msgs_status_colors[3]),
          $html->color_mark("$_OPEN: " . $html->b($Msgs->{OPEN}),                   $msgs_status_colors[0]),
          $html->color_mark("$_CLOSED_UNSUCCESSFUL: " . $html->b($Msgs->{UNMAKED}), $msgs_status_colors[1]),
          $html->color_mark("$_CLOSED_SUCCESSFUL: " . $html->b($Msgs->{CLOSED}),    $msgs_status_colors[2]),
        ]
      ],
      rowcolor => 'total'
    }
  );
  print $table->show();
}

#*******************************************************************
#
#*******************************************************************
sub msgs_chapters {
  $Msgs->{ACTION}     = 'add';
  $Msgs->{LNG_ACTION} = $_ADD;

  if ($FORM{add}) {
    $Msgs->chapter_add({%FORM});

    $html->message('info', $_INFO, "$_ADDED") if (!$Msgs->{errno});
  }
  elsif ($FORM{change}) {

    $Msgs->chapter_change({%FORM});

    $html->message('info', $_INFO, "$_CHANGED") if (!$Msgs->{errno});
  }
  elsif ($FORM{chg}) {
    $Msgs->chapter_info($FORM{chg});
    $Msgs->{ACTION}     = 'change';
    $Msgs->{LNG_ACTION} = $_CHANGE;

    $html->message('info', $_INFO, "$_CHANGING") if (!$Msgs->{errno});
  }
  elsif ($FORM{del} && $FORM{is_js_confirmed}) {
    $Msgs->chapter_del({ ID => $FORM{del} });

    $html->message('info', $_INFO, "$_DELETED") if (!$Msgs->{errno});
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }

  $Msgs->{INNER_CHAPTER} = ($Msgs->{INNER_CHAPTER}) ? ' checked' : '';

  $html->tpl_show(_include('msgs_chapter', 'Msgs'), $Msgs);

  my $list = $Msgs->chapters_list({%LIST_PARAMS});

  my $table = $html->table(
    {
      width   => '100%',
      caption => "$_CHAPTERS",
      title   => [ '#', "$_NAME", "$_INNER", "$_MESSAGES", "-", "-" ],
      cols_align => [ 'left', 'left', 'right', 'center:noprint', 'center:noprint' ],
      qs         => $pages_qs,
    }
  );

  foreach my $line (@$list) {
    $table->addrow($line->[0], $line->[1], $bool_vals[ $line->[2] ], $html->button($line->[3], ""), $html->button("$_CHANGE", "index=$index&chg=$line->[0]", { CLASS => 'change' }), $html->button($_DEL, "index=$index&del=$line->[0]", { MESSAGE => "$_DEL $line->[0]?", CLASS => 'del' }));
  }

  print $table->show();
}

#*******************************************************************
# dispatch admins
#*******************************************************************
sub msgs_dispatch_admins {
  if ($FORM{change_admins}) {
    $Msgs->dispatch_admins_change({%FORM});
    $html->message('info', $_INFO, "$_CHANGED") if (!$Msgs->{errno});
  }

  my $list = $Msgs->dispatch_admins_list({ DISPATCH_ID => $FORM{chg} });
  my %active_admins = ();
  foreach my $line (@$list) {
    $active_admins{ $line->[1] } = 1;
  }

  $list = $admin->list({%LIST_PARAMS});

  my $table = $html->table(
    {
      width      => '100%',
      caption    => "$_ADMINS",
      title      => [ '#', $_ADMIN, "$_FIO" ],
      cols_align => [ 'right', 'left', 'center', 'center:noprint' ],
      qs         => $pages_qs,
      ID         => 'MSGS_ADMINS'
    }
  );

  foreach my $line (@$list) {
    $table->addrow(
      $html->form_input(
        'AIDS',
        "$line->[0]",
        {
          TYPE  => 'checkbox',
          STATE => ($active_admins{ $line->[0] }) ? 1 : undef
        }
      ),
      $line->[0],
      $line->[1]
    );
  }

  print $html->form_main(
    {
      CONTENT => $table->show(),
      HIDDEN  => {
        index       => "$index",
        DISPATCH_ID => $FORM{chg},
        chg         => $FORM{chg},
      },
      SUBMIT => { change_admins => $_CHANGE },
      NAME   => 'admins_list'
    }
  );
}

#*******************************************************************
# Count New messages for user
#*******************************************************************
sub msgs_dispatch {
  $Msgs->{ACTION}     = 'add';
  $Msgs->{LNG_ACTION} = $_ADD;

  if ($FORM{add}) {
    $Msgs->dispatch_add({%FORM});

    $html->message('info', $_INFO, "$_ADDED") if (!$Msgs->{errno});
  }
  elsif ($FORM{print}) {
    print $html->header();
    $Msgs->dispatch_info($FORM{print});

    my $list = $Msgs->messages_list(
      {
        DISPATCH_ID  => $FORM{print},
        DESC         => (!$FORM{sort}) ? 'DESC' : $FORM{desc},
        FULL_ADDRESS => 1,
        SHOW_TEXT    => 1,
        PASSWORD     => 1
      }
    );

    my %ORDERS = ();
    my $i      = 1;

    foreach my $line (@$list) {
      $ORDERS{ 'ORDER_NUM_' . $i }                    = $i;
      $ORDERS{ 'ORDER_PERSONAL_INFO_' . $i }          = "$line->[6], $line->[7], $line->[8]";
      $ORDERS{ 'ORDER_PERSONAL_INFO_LOGIN_' . $i }    = "$line->[1]";
      $ORDERS{ 'ORDER_PERSONAL_INFO_PASSWORD_' . $i } = "$line->[10]";
      $ORDERS{ 'ORDER_PERSONAL_INFO_FIO_' . $i }      = "$line->[6]";
      $ORDERS{ 'ORDER_PERSONAL_INFO_ADDRESS_' . $i }  = "$line->[7]";
      $ORDERS{ 'ORDER_PERSONAL_INFO_PHONE_' . $i }    = "$line->[8]";
      $ORDERS{ 'ORDER_JOB_' . $i }                    = $line->[9];
      $ORDERS{ 'ORDER_SUBJECT_' . $i }                = $line->[2];
      $ORDERS{ 'ORDER_CHAPTER_' . $i }                = $line->[3];
      $i++;
    }

    $html->tpl_show(_include('msgs_dispatch_blank', 'Msgs'), { %$Msgs, %ORDERS });

    exit;
  }
  elsif ($FORM{change}) {
    if ($FORM{STATE} > 0) {
      $FORM{DONE_DATE} = "$DATE" if ($FORM{STATE} == 2);
      $FORM{CLOSED_DATE} = "$DATE";
    }

    $Msgs->dispatch_change({%FORM});
    $html->message('info', $_INFO, "$_CHANGED") if (!$Msgs->{errno});
  }
  elsif ($FORM{chg}) {
    $Msgs->dispatch_info($FORM{chg});
    $Msgs->{ACTION}     = 'change';
    $Msgs->{LNG_ACTION} = $_CHANGE;
    $html->message('info', $_INFO, "$_CHANGING") if (!$Msgs->{errno});
  }
  elsif ($FORM{del} && $FORM{is_js_confirmed}) {
    $Msgs->dispatch_del({ ID => $FORM{del} });
    $html->message('info', $_INFO, "$_DELETED") if (!$Msgs->{errno});
  }
  elsif ($FORM{msg_del} && $FORM{is_js_confirmed}) {
    $Msgs->message_change(
      {
        DISPATCH_ID => 0,
        ID          => $FORM{msg_del}
      }
    );

    $html->message('info', $_INFO, "$_MESSAGE # $FORM{msg_del} $_DELETED") if (!$Msgs->{errno});
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }
  $LIST_PARAMS{STATE} = $FORM{STATE} if (defined($FORM{STATE}) && $FORM{STATE} ne '');
  push @msg_status, $_IN_WORK;
  $Msgs->{STATE_SEL} = $html->form_select(
    'STATE',
    {
      SELECTED => $Msgs->{STATE} || 0,
      SEL_ARRAY    => [ @msg_status, "$_ALL" ],
      ARRAY_NUM_ID => 0,
      EX_PARAMS    => "onchange='samechanged(this)'"
    }
  );

  $Msgs->{RESPOSIBLE_SEL} = $html->form_select(
    'RESPOSIBLE',
    {
      SELECTED => $Msgs->{RESPOSIBLE_ID} || 0,
      SEL_MULTI_ARRAY => [ [ 0, '' ], @{ $admin->list({ GIDS => $admins->{GIDS} }) } ],
      MULTI_ARRAY_KEY => 0,
      MULTI_ARRAY_VALUE => 1,
      EX_PARAMS         => " STYLE='background-color: $_COLORS[3]' DISABLED"
    }
  );

  $Msgs->{PLAN_DATE} = $DATE;
  $html->tpl_show(_include('msgs_dispatch', 'Msgs'), $Msgs);

  if ($FORM{chg}) {
    $LIST_PARAMS{DISPATCH_ID} = $FORM{chg};

    #$FORM{chg}=undef;
    my $list = $Msgs->messages_list({ %LIST_PARAMS, DESC => (!$FORM{sort}) ? 'DESC' : $FORM{desc} });

    $pages_qs .= "&chg=$FORM{chg}";
    my $table = $html->table(
      {
        width   => '100%',
        caption => "$_MESSAGES",
        title   => [ '#', "$_USER", "$_SUBJECT", "$_CHAPTERS", "$_DATE", "$_STATUS", "IP", "$_RESPOSIBLE", "$_ADMIN", "$_PRIORITY", "$_EXECUTION", "-", "-" ],
        cols_align => [ 'right', 'left', 'left', 'right', 'right', 'left', 'center', 'right', 'left', 'center:noprint', 'center:noprint' ],
        qs         => $pages_qs,
        pages      => $Msgs->{TOTAL},
        ID         => 'MSGS_LIST',
        header     => (
          ($#A_CHAPTER == -1)
          ? "<script language=\"JavaScript\" type=\"text/javascript\">
<!-- 
function CheckAllINBOX() {
  for (var i = 0; i < document.users_list.elements.length; i++) {
    if(document.users_list.elements[i].type == 'checkbox' && document.users_list.elements[i].name == 'del'){
      document.users_list.elements[i].checked =         !(document.users_list.elements[i].checked);
    }
  }
}
//-->
</script>\n <a href=\"javascript:void(0)\" onClick=\"CheckAllINBOX();\">$_SELECT_ALL</a> \n"
          : ''
        )
        . $status_bar
      }
    );

    foreach my $line (@$list) {
      my $state = ($line->[6] == 0) ? $html->b($msg_status[ $line->[6] ]) : $msg_status[ $line->[6] ];

      $state .= '<img src="../img/red_dot.gif" border="0" alt="No reply"/>' if ($line->[17] eq '0000-00-00 00:00:00');
      my $priority = $html->color_mark($priority[ $line->[9] ], $priority_colors[ $line->[9] ]);

      $table->addrow(
        $line->[0] . (($A_PRIVILEGES{ $line->[19] } > 2 || scalar keys %CHAPTERS_DELIGATION == 0) ? $html->form_input('del', "$line->[0]", { TYPE => 'checkbox' }) : '') . (($line->[22]) ? $html->b("($_INNER_MSGS_CHAR)") : ""),
        ($line->[12] > 0) ? $html->button($line->[1], "index=11&UID=$line->[12]") : $line->[1],
        $html->button((($line->[2]) ? "$line->[2]" : $_NO_SUBJECT), "index=" . get_function_index('msgs_admin') . "&UID=$line->[12]&chg=$line->[0]"),
        $line->[3],
        $line->[4],
        $line->[5],
        $state,
        $line->[7],
        $line->[8],
        $priority,
        $line->[10],
        $html->button("$_SHOW", "index=" . get_function_index('msgs_admin') . "&chg=$line->[0]&UID=$line->[12]", { CLASS => 'show' }),
        (($A_PRIVILEGES{ $line->[19] } > 2 || $#A_CHAPTER == -1) ? $html->button($_DEL, "index=" . get_function_index('msgs_admin') . "&del=$line->[0]", { MESSAGE => "$_DEL '$line->[0]' ?", CLASS => 'del' }) : '')
      );
    }

    my $dispatch = msgs_dispatch_sel();
    print $html->form_main(
      {
        CONTENT => $table->show() . $dispatch,
        HIDDEN  => {
          index => get_function_index('msgs_admin'),
          UID   => $FORM{UID},
        },
        NAME => 'users_list'
      }
    );

    msgs_dispatch_admins();
  }

  if (!defined($FORM{STATE}) && !$FORM{ALL_MSGS}) {
    $FORM{STATE}        = 0;
    $LIST_PARAMS{STATE} = 0;
  }

  if (!defined($FORM{sort})) {
    $LIST_PARAMS{SORT} = 1;
    $LIST_PARAMS{DESC} = 'desc';
  }

  my $list = $Msgs->dispatch_list({%LIST_PARAMS});

  my $i = 0;
  $pages_qs = '';

  my $status_bar = (defined($FORM{STATE})) ? $html->button("$_ALL", "index=$index&ALL_MSGS=1$pages_qs") : $html->b($_ALL);

  foreach my $name (@msg_status) {
    if (defined($FORM{STATE}) && $FORM{STATE} == $i) {
      $LIST_PARAMS{STATE} = $FORM{STATE};
      $status_bar .= ' ' . $html->b($name);
    }
    else {
      $status_bar .= ' ' . $html->button("$name", "index=$index&STATE=$i$pages_qs");
    }
    $i++;
  }

  my $table = $html->table(
    {
      width   => '100%',
      caption => "$_DISPATCH",
      title   => [ '#', "$_COMMENTS", $_EXECUTION, "$_CREATED", "$_MESSAGES", "-", "-", "-" ],
      cols_align => [ 'left', 'left', 'right', 'center:noprint', 'center:noprint' ],
      qs         => $pages_qs,
      ID         => 'MSGS_DISPATCH',
      header     => $status_bar
    }
  );

  foreach my $line (@$list) {
    $table->addrow(
      $line->[0],
      $line->[1],
      $line->[2],
      $line->[3],
      $line->[4],
      $html->button(
        $_PRINT, "#",
        {
          NEW_WINDOW      => "$SELF_URL?qindex=$index&print=$line->[0]",
          NEW_WINDOW_SIZE => "640:600",
          CLASS           => 'print'
        }
      ),
      $html->button("$_CHANGE", "index=$index&chg=$line->[0]", { CLASS => 'change' }),
      $html->button($_DEL, "index=$index&del=$line->[0]", { MESSAGE => "$_DEL $line->[0]?", CLASS => 'del' })
    );
  }

  print $table->show();
}

#*******************************************************************
# Count New messages for user
#*******************************************************************
sub msgs_new {
  my ($attr) = @_;

  my %SHOW_PARAMS = (GIDS => $LIST_PARAMS{GIDS});
  if ($attr->{UID}) {
    %SHOW_PARAMS = (
      UID        => $UID,
      USER_READ  => '0000-00-00 00:00:00',
      ADMIN_READ => '>0000-00-00 00:00:00',
      INNER_MSG  => 0
    );

    $Msgs->messages_new({%SHOW_PARAMS});

    if ($Msgs->{TOTAL} > 0 && $Msgs->{UNREAD} > 0) {
      if ($conf{MSGS_UNREAD_FORWARD}) {
        my @RULES_ARR = split(/;/, $conf{MSGS_UNREAD_FORWARD});
        foreach my $rule (@RULES_ARR) {
          my ($USER_GID, $MESSAGE_CHAPTER, $URL) = split(/:/, $rule, 3);
          if (int($USER_GID) > 0 && $user->{GID} != int($USER_GID)) {
            next;
          }
          elsif (int($MESSAGE_CHAPTER) > 0 && int($MESSAGE_CHAPTER) && $Msgs->{CHAPTER} != int($MESSAGE_CHAPTER)) {
            next;
          }
          $Msgs->message_change(
            {
              ID         => $Msgs->{MSG_ID},
              ADMIN_READ => "0000-00-00 00:00:00",
              STATE      => 2,
              USER_READ  => "$DATE $TIME",
            }
          );

          if ($conf{MSGS_REDIRECT_FILTER_DEL}) {
            require "Dv.pm";
            my $Dv = Dv->new($db, $admin, \%conf);
            $Dv->change({ UID => $user->{UID}, FILTER_ID => '' });
            if ($conf{MSGS_REDIRECT_FILTER_DEL} =~ /EXEC:(.+)/) {
              my $cmd = $1;
              $cmd =~ s/\%DATE\%/$DATE $TIME/g;
              $cmd =~ s/\%IP\%/$ENV{REMOTE_ADDR}/g;
              $cmd =~ s/\%LOGIN\%/$user->{LOGIN}/g;
              $cmd =~ s/\%MSG_ID\%/$Msgs->{MSG_ID}/g;
              my $res = `$cmd`;
            }

          }

          print "Location: $URL?GID=$user->{GID}&MESSAGE_CHAPTER=$Msgs->{CHAPTER}&MSG_ID=$Msgs->{MSG_ID}", "\n\n";
          exit;
        }
      }
      return '(' . (($Msgs->{UNREAD} > 0) ? $html->color_mark($Msgs->{UNREAD}, $_COLORS[6], { SKIP_XML => 1 }) : 0) . ')';
    }

    return '';
  }
  elsif ($attr->{AID}) {
    %SHOW_PARAMS = (
      ADMIN_READ => '0000-00-00 00:00:00',
      GIDS       => ($admin->{GIDS}) ? $admin->{GIDS} : $admin->{GID}
    );

    my $a_list = $Msgs->admins_list({ AID => $attr->{AID} });
    my @A_CHAPTER = ();

    foreach my $line (@$a_list) {
      if ($line->[5] > 0) {
        push @A_CHAPTER, "$line->[5]";
      }
    }
    if ($#A_CHAPTER > -1) {
      $SHOW_PARAMS{CHAPTERS} = join(', ', @A_CHAPTER);
    }

    my $list = $Msgs->messages_new({ %SHOW_PARAMS, SHOW_CHAPTERS => 1 });
    my $id = 11;
    $Msgs->{UNREAD} = 0;
    foreach my $line (@$list) {
      $id++;
      my $count = '';
      if ($line->[4] > 0) {
        $count = '(' . (($line->[2] > 2) ? $html->color_mark($line->[2], $_COLORS[6], { SKIP_XML => 1 }) : 0) . "/$line->[3]/$line->[4]/" . (($line->[5] > 0) ? $html->color_mark($line->[5], '#F07800', { SKIP_XML => 1 }) : 0) . ")";
        $Msgs->{UNREAD}     += $line->[2];
        $Msgs->{TODAY}      += $line->[3];
        $Msgs->{OPENED}     += $line->[4];
        $Msgs->{RESPOSIBLE} += $line->[5];
      }
      $FUNCTIONS_LIST{"$id:10:$line->[1] $count:msgs_admin:CHAPTER=$line->[0]"} = 8;
    }
    $id++;
    $FUNCTIONS_LIST{ "$id:10:$_RESPOSIBLE " . (($Msgs->{RESPOSIBLE} && $Msgs->{RESPOSIBLE} > 0) ? '(' . $html->color_mark($Msgs->{RESPOSIBLE}, '#F07800', { SKIP_XML => 1 }) . ')' : 0) . ":msgs_admin:&STATE=8" } = 8;
    if ($Msgs->{OPENED} && $Msgs->{OPENED} > 0) {
      return '(' . (($Msgs->{UNREAD} > 0) ? $html->color_mark($Msgs->{UNREAD}, $_COLORS[6], { SKIP_XML => 1 }) : 0) . "/$Msgs->{TODAY}/$Msgs->{OPENED})";
    }
  }

  return '';
}

#*******************************************************************
# Count New messages for user
#*******************************************************************
sub msgs_shedule {
  my %MSGS_PERIOD = (
    0 => $_DAY,
    1 => "5 $_DAYS",
    2 => "$_WEEK",
    3 => "$_MONTH",
    4 => "$_TOTAL"
  );

  my @rows      = ();
  my $period    = $FORM{PERIOD} || 0;
  my %SHOW_TYPE = (
    admins   => "$_ADMINS",
    chapters => "$_CHAPTERS",
    date     => "$_DATE"
  );

  if (!$FORM{SHOW_TYPE}) {
    $FORM{SHOW_TYPE} = 'date';
  }

  my $table = $html->table(
    {
      width   => '100%',
      caption => "$_TYPE",
      ID      => 'MSGS_SHEDULER_TYPE',
    }
  );

  foreach my $id (sort keys %SHOW_TYPE) {
    if ($FORM{SHOW_TYPE} eq $id) {
      push @rows, $table->th($SHOW_TYPE{$id}, { bgcolor => $_COLORS[1] });
    }
    else {
      push @rows, $table->th($html->button("$SHOW_TYPE{$id}", "index=$index&PERIOD=$FORM{PERIOD}&SHOW_TYPE=$id"), { bgcolor => $_COLORS[0] });
    }
  }

  $table->addtd(@rows);
  print $table->show();

  @rows  = ();
  $table = $html->table(
    {
      width   => '100%',
      caption => "$_PERIOD",
      ID      => 'MSGS_SHEDULER_PERIOD',
    }
  );

  foreach my $id (sort keys %MSGS_PERIOD) {
    if ($period == $id) {
      push @rows, $table->th($MSGS_PERIOD{$id}, { bgcolor => $_COLORS[1] });
    }
    else {
      push @rows, $table->th($html->button("$MSGS_PERIOD{$id}", "index=$index&PERIOD=$id&SHOW_TYPE=$FORM{SHOW_TYPE}"), { bgcolor => $_COLORS[0] });
    }
  }

  $table->addtd(@rows);
  print $table->show();

  if ($period == 1) {
    $LIST_PARAMS{PLAN_FROM_DATE} = $DATE;
    $LIST_PARAMS{PLAN_TO_DATE} = strftime "%Y-%m-%d", localtime(time + 86400 * 5);
  }
  elsif ($period == 2) {
    $LIST_PARAMS{PLAN_WEEK} = 1;
  }
  elsif ($period == 3) {
    $LIST_PARAMS{PLAN_MONTH} = 1;
  }
  elsif ($period == 4) {

  }
  else {
    $LIST_PARAMS{PLAN_FROM_DATE} = $DATE;
    $LIST_PARAMS{PLAN_TO_DATE}   = $DATE;
  }

  my $list = $Msgs->messages_list(
    {
      %LIST_PARAMS,
      DESC      => '',
      SORT      => 10,
      STATE     => 0,
      PAGE_ROWS => 10000
    }
  );

  $table = $html->table(
    {
      width   => '300',
      caption => "$_SHEDULE",
      ID      => 'SHEDULE_LIST',
    }
  );

  my %dates = ();
  my $table2;
  my @main_table_rows = ();
  my $color           = $_COLORS[0];

  my @chapters_list = @{ $Msgs->chapters_list() };
  my @admins_list = ([ 0, "- $_UNKNOWS" ], @{ $admin->list({ GIDS => $admins->{GIDS} }) });

  foreach my $line (@$list) {

    #my $state = $msg_status[$line->[5]];
    my ($date, $time) = split(/ /, $line->[9]);
    my @hours = ();

    if (!$dates{$date}) {
      my $caption = '';
      if (keys %dates > 0) {
        if ($FORM{SHOW_TYPE} eq 'chapters' || $FORM{SHOW_TYPE} eq 'admins') {
          $title = $_CHAPTERS;

          if ($FORM{SHOW_TYPE} eq 'admins') {
            @chapters_list = @admins_list;
            $title         = $_ADMINS;
          }

          foreach my $chapter_info (@chapters_list) {
            @hours = ();
            my ($h_b, $h_e, $p);
            my $link = "&nbsp;";
            for (my $h = 0 ; $h < 24 * 4 ; $h++) {
              if ($calendar{ $chapter_info->[0] }) {
                $day_periods = $visual_view{$i};
                foreach my $chap_periods (@{ $calendar{ $chapter_info->[0] } }) {
                  ($number, $user_name, $uid, $time_exec) = split(/\|/, $chap_periods, 4);
                  my ($h_b, $m_b, $s_b) = split(/:/, $time_exec);
                  $h_e = $h_b;
                  if ( (($h / 4 >= $h_b) && ($h / 4 <= $h_e) && $m_b <= 15)
                    || ((($h - 1) / 4 == $h_b) && ($m_b <= 30 && $m_b >= 15))
                    || ((($h - 2) / 4 == $h_b) && ($m_b <= 45 && $m_b >= 30))
                    || ((($h - 3) / 4 == $h_b) && ($m_b <= 60 && $m_b >= 45)))
                  {

                    $tdcolor = $color;
                    $link = "<acronym title='$_USER: $user_name\n ID: $number\n $_TIME: $time'> " . $html->button("#", "index=" . ($index - 3) . "&chg=$number&UID=$uid",) . "</acronym>";
                    last;
                  }
                  else {
                    $link    = "&nbsp;";
                    $tdcolor = $_COLORS[1];
                  }
                }
              }
              else {
                $link    = "&nbsp;";
                $tdcolor = $_COLORS[1];
              }

              push(@hours, $table2->td("$link", { align => 'center', bgcolor => $tdcolor }));
            }

            $table2->addtd($table->td($html->b($chapter_info->[1]), { bgcolor => $_COLORS[2] }), @hours);
          }

          %calendar = ();
        }

        push @main_table_rows, $table2->show({ OUTPUT2RETURN => 1 });
      }

      if ($line->[19] == 0) {
        $caption = $html->color_mark($WEEKDAYS[7], $_COLORS[6]);
      }
      elsif ($line->[19] == 6) {
        $caption = $html->color_mark($WEEKDAYS[6], $_COLORS[6]);
      }
      else {
        $caption = $WEEKDAYS[ $line->[19] ];
      }

      if ($FORM{SHOW_TYPE} eq 'chapters' || $FORM{SHOW_TYPE} eq 'admins') {
        $table2 = $html->table(
          {
            width    => '100%',
            caption  => $caption . " / $date",
            rowcolor => 'odd'
          }
        );

        my $list = $Msgs->messages_list(
          {
            %LIST_PARAMS,
            DESC      => '',
            SORT      => 10,
            STATE     => 0,
            PAGE_ROWS => 10000
          }
        );

        my @hours = ();
        for (my $i = 0 ; $i < 24 ; $i++) {
          push @hours, $table2->td($html->b($i), { bgcolor => $_COLORS[0], colspan => 4, align => 'center' });
        }

        $table2->addtd($table2->td($html->b($title), { bgcolor => $_COLORS[0] }), @hours);
      }
      else {
        $table2 = $html->table(
          {
            width   => '300',
            caption => $caption . " / $date",
            title   => [ '#', "$_ADMIN", "$_TIME", "$_SUBJECT" ],
            cols_align => [ 'right', 'left', 'left' ],
            ID         => 'SHEDULE_LIST',
          }
        );
      }

      $dates{$date} = 1;
    }

    if ($FORM{SHOW_TYPE} eq 'chapters') {
      push @{ $calendar{ $line->[18] } }, "$line->[0]|$line->[7]|$line->[11]|$time";
    }
    elsif ($FORM{SHOW_TYPE} eq 'admins') {
      push @{ $calendar{ $line->[20] } }, "$line->[0]|$line->[7]|$line->[11]|$time";
    }
    else {
      $table2->addrow($html->button("$line->[0]", "index=" . ($index - 3) . "&chg=$line->[0]&UID=$line->[11]"), "$line->[7]", $time, $line->[2]);
    }

  }

  if ($table2) {
    if ($FORM{SHOW_TYPE} eq 'chapters' || $FORM{SHOW_TYPE} eq 'admins') {

      @chapters_list = @admins_list if ($FORM{SHOW_TYPE} eq 'admins');

      foreach my $chapter_info (@chapters_list) {
        @hours = ();
        my ($h_b, $h_e, $p);
        my $link = "&nbsp;";

        for (my $h = 0 ; $h < 24 * 4 ; $h++) {
          if ($calendar{ $chapter_info->[0] }) {
            $day_periods = $visual_view{$i};

            #print "<b>Chapters $chapter_info->[0]</b>/ <br>";
            foreach my $chap_periods (@{ $calendar{ $chapter_info->[0] } }) {

              #print "$i -- $chap_periods  <br>\n";
              ($number, $user_name, $uid, $time) = split(/\|/, $chap_periods, 4);
              my ($h_b, $m_b, $s_b) = split(/:/, $time);
              $h_e = $h_b;
              if ( (($h / 4 >= $h_b) && ($h / 4 <= $h_e) && $m_b <= 15)
                || ((($h - 1) / 4 == $h_b) && ($m_b <= 30 && $m_b >= 15))
                || ((($h - 2) / 4 == $h_b) && ($m_b <= 45 && $m_b >= 30))
                || ((($h - 3) / 4 == $h_b) && ($m_b <= 60 && $m_b >= 45)))
              {
                $tdcolor = $color;
                $link = "<acronym title='$_USER: $user_name\n ID: $number\n $_TIME: $time'> " . $html->button("#", "index=" . ($index - 3) . "&chg=$number&UID=$uid",) . "</acronym>";
                last;
              }
              else {
                $link    = "&nbsp;";
                $tdcolor = $_COLORS[1];
              }
            }
          }
          else {
            $link    = "&nbsp;";
            $tdcolor = $_COLORS[1];
          }

          push(@hours, $table2->td("$link", { align => 'center', bgcolor => $tdcolor }));
        }

        $table2->addtd($table->td($html->b($chapter_info->[1]), { bgcolor => $_COLORS[2] }), @hours);
      }

    }

    push @main_table_rows, $table2->show({ OUTPUT2RETURN => 1 });
  }
  else {
    print $html->message('info', $_INFO, "$_NO_RECORD");
    return 0;
  }

  if ($FORM{SHOW_TYPE} eq 'chapters' || $FORM{SHOW_TYPE} eq 'admins') {
    foreach my $t (@main_table_rows) {
      print $t;
    }
  }
  else {

    my $i          = 0;
    my @table_rows = ();
    $table->{rowcolor} = 'odd';
    foreach my $line (@main_table_rows) {
      $i++;
      push @table_rows, $table->td($line, { valign => 'top' });
      if ($i > 2) {
        $table->addtd(@table_rows);
        @table_rows = ();
        $i          = 0;
      }
    }

    if ($#table_rows > -1) {
      $table->addtd(@table_rows);
    }

    print $table->show();
  }

}

#**********************************************************
#
#**********************************************************
sub msgs_reports {
  my %CAPTIONS_HASH = ();

  reports(
    {
      DATE      => $FORM{DATE},
      REPORT    => '',
      EX_PARAMS => {
        DATE   => "$_DATE",
        USERS  => "$_USERS",
        ADMINS => "$_ADMINS",

      },
      PERIOD_FORM => 1,
      EXT_TYPE    => {
        ADMINS     => $_ADMINS,
        RESPOSIBLE => $_RESPOSIBLE
      },
      FIELDS => {
        "1:STATE" => "$_OPEN",
        "2:STATE" => "$_CLOSED_UNSUCCESSFUL",
        "3:STATE" => "$_CLOSED_SUCCESSFUL"

      },
    }
  );

  my ($table_sessions);
  my $output = '';

  my %DATA_HASH = ();
  my %CHART     = ();
  my %AVG       = (
    COUNT   => 0,
    MAKED   => 0,
    UNMAKED => 0
  );

  my $graph_type = '';

  #Day reposrt
  if ($FORM{DATE}) {
    if (!defined($FORM{sort})) {
      $LIST_PARAMS{SORT} = 1;
      $LIST_PARAMS{DESC} = DESC;
    }

    my $list = $Msgs->messages_list({%LIST_PARAMS});
    $table_sessions = $html->table(
      {
        width   => '100%',
        caption => "$_MSGS",
        border  => 1,
        title   => [ '#', "$_USER", "$_SUBJECT", "$_CHAPTERS", "$_DATE", "$_STATUS", "IP", "$_ADMIN", "$_PRIORITY", "$_EXECUTION", "$_RUN_TIME" ],
        cols_align => [ 'right', 'left', 'left', 'left', 'right', 'left', 'center', 'right', 'center:noprint', 'center:noprint' ],
        ID         => 'MSGS',
        EXPORT     => ' XML:&xml=1',
      }
    );

    my ($delete, $change);
    foreach my $line (@$list) {

      #    if ($permissions{4}{1}) {
      #      $delete = $html->button($_DEL, "index=$index&del=$line->[0]", { MESSAGE => "$_DEL $line->[0]?" });
      #      $change = $html->button($_CHANGE, "index=$index&chg=$line->[0]&UID=$line->[10]");
      #     }

      my $priority = $html->color_mark($priority[ $line->[8] ], $priority_colors[ $line->[8] ]);

      $table_sessions->addrow(
        $html->b($line->[0]),
        $html->button($line->[1], "index=15&UID=$line->[12]"),
        $line->[2],
        $line->[3],
        $line->[4],
        ($line->[5] == 0) ? $html->b($msg_status[ $line->[5] ]) : $msg_status[ $line->[5] ],
        $line->[6],
        $line->[7],
        $priority,
        $line->[9],
        $line->[10],

        #     $change,
        #     $delete
      );
    }

  }
  else {
    my %fields_hash = ();
    my @fields_arr  = ();
    my @caption     = ("$_DATE", "$msg_status[0]", "$msg_status[1]", "$msg_status[2]", "$_COUNT", "$_RUN_TIME");

    if ($FORM{TYPE}) {
      if ($FORM{TYPE} eq 'ADMINS') {
        $caption[0] = $_ADMINS;
      }
      elsif ($FORM{TYPE} eq 'USER') {
        $caption[0] = $_USERS;
      }
      elsif ($FORM{TYPE} eq 'RESPOSIBLE') {
        $caption[0] = $_RESPOSIBLE;
      }
    }

    $table_sessions = $html->table(
      {
        width      => '100%',
        caption    => "$_MSGS",
        title      => \@caption,
        cols_align => [ 'right', 'right', 'right', 'right', 'right', 'right', 'right' ],
        qs         => $pages_qs,
        ID         => 'MSGS_REPORT'
      }
    );

    $graph_type = 'month_stats';
    my $num = 0;

    my $list = $Msgs->messages_reports({%LIST_PARAMS});

    foreach my $line (@$list) {
      my $firth_field = $html->button($line->[0], "index=$index&$type=$line->[0]$pages_qs");
      if ($FORM{TYPE}) {
        if ($FORM{TYPE} eq 'USER') {
          $firth_field = $html->button($line->[0], "index=15&UID=$line->[6]");
        }
        elsif ($FORM{TYPE} eq 'ADMINS' || $FORM{TYPE} eq 'RESPOSIBLE') {
          $firth_field = $html->button("$line->[0]", "index=$index&RESPOSIBLE=$line->[0]");
        }
      }

      @rows = ($firth_field, $line->[1], $line->[2], $line->[3], $line->[4], $line->[5]);

      $AVG{COUNT}   = $line->[4]           if ($AVG{COUNT} < $line->[4]);
      $AVG{MAKED}   = $line->[2]           if ($AVG{MAKED} < $line->[2]);
      $AVG{UNMAKED} = time2sec($line->[3]) if ($AVG{UNMAKED} < $line->[3]);

      if ($line->[0] =~ /(\d+)-(\d+)-(\d+)/) {
        $num = $3;
      }
      elsif ($line->[0] =~ /(\d+)-(\d+)/) {
        $CHART{X_LINE}[$num] = $line->[0];
        $num++;
      }

      $DATA_HASH{COUNT}[$num]    = $line->[4];
      $DATA_HASH2{MAKED}[$num]   = $line->[2];
      $DATA_HASH2{UNMAKED}[$num] = $line->[3];

      $table_sessions->addrow(@rows);
    }

    $output = $html->make_charts(
      {
        PERIOD        => $graph_type,
        DATA          => \%DATA_HASH2,
        AVG           => \%AVG,
        TYPE          => [ 'area', 'area' ],
        TRANSITION    => 1,
        OUTPUT2RETURN => 1
      }
    );

  }

  $table = $html->table(
    {
      width      => '100%',
      cols_align => [ 'right', 'right', 'right', 'right', 'right', 'right' ],
      rows       => [ [ "$msg_status[0]: " . $html->b($Msgs->{OPEN}), "$msg_status[1]: " . $html->b($Msgs->{UNMAKED}), "$msg_status[2]: " . $html->b($Msgs->{MAKED}), "$_COUNT: " . $html->b($Msgs->{TOTAL}), "$_RUN_TIME" . $html->b($Msgs->{RUN_TIME}) ] ],
      rowcolor   => 'total'
    }
  );
  print $table_sessions->show() . $table->show() . $output;
}

#**********************************************************
#
#**********************************************************
sub msgs_unreg_requests_list {
  my ($attr) = @_;

  if ($FORM{change}) {
    if ($FORM{qindex}) {
      print $html->header();
    }
    my %params = ();
    $params{CLOSED_DATE} = "$DATE $TIME" if ($FORM{STATE} > 0);
    $params{DONE_DATE}   = "$DATE $TIME" if ($FORM{STATE} > 1);

    $Msgs->unreg_requests_change({ %FORM, %params });
    $html->message('info', $_INFO, "$_CHANGED") if (!$Msgs->{errno});

    $Msgs->unreg_requests_info($FORM{ID});

    $Msgs->{ACTION}     = 'change';
    $Msgs->{LNG_ACTION} = $_CHANGE;
  }
  elsif ($FORM{chg}) {
    $Msgs->unreg_requests_info($FORM{chg});
    $Msgs->{ACTION}     = 'change';
    $Msgs->{LNG_ACTION} = $_CHANGE;
  }
  elsif ($FORM{del} && $FORM{is_js_confirmed}) {
    $Msgs->unreg_requests_del({ ID => $FORM{del} });
    $html->message('info', $_INFO, "$_DELETED") if (!$Msgs->{errno});
  }

  if ($FORM{qindex}) {
    $Msgs->{PRIORITY_SEL} = $html->form_select(
      'PRIORITY',
      {
        SELECTED => $FORM{PRIORITY} || 2,
        SEL_ARRAY    => [@priority],
        STYLE        => \@priority_colors,
        ARRAY_NUM_ID => 1
      }
    );

    $Msgs->{STATE_SEL} = $html->form_select(
      'STATE',
      {
        SELECTED => $Msgs->{STATE} || 3,
        SEL_ARRAY    => [@msg_status],
        STYLE        => \@style,
        ARRAY_NUM_ID => 0
      }
    );

    $Msgs->{STATE_NAME} = $html->color_mark($msg_status[ $Msgs->{STATE} ], $style[ $Msgs->{STATE} ]);

    $html->tpl_show(_include('msgs_request_show', 'Msgs'), $Msgs);
    return 0;
  }

  my $a_list = $Msgs->admins_list({ AID => $admin->{AID} });

  my @A_CHAPTER    = ();
  my %A_PRIVILEGES = ();
  foreach my $line (@$a_list) {
    if ($line->[5] > 0) {
      push @A_CHAPTER, "$line->[5]";
      $A_PRIVILEGES{ $line->[5] } = $line->[2];
    }
  }

  if ($#A_CHAPTER > -1) {
    $LIST_PARAMS{CHAPTERS} = join(', ', @A_CHAPTER);
    $LIST_PARAMS{UID} = undef if (!$FORM{UID});
  }

  if (!$attr->{LIST_ONLY}) {
    $Msgs->{STATE_SEL} = $html->form_select(
      'STATE',
      {
        SELECTED => $FORM{STATE} || 3,
        SEL_ARRAY    => [ @msg_status, "$_ALL" ],
        STYLE        => \@style,
        ARRAY_NUM_ID => 0
      }
    );

    $Msgs->{PRIORITY_SEL} = $html->form_select(
      'PRIORITY',
      {
        SELECTED => $FORM{PRIORITY} || 2,
        SEL_ARRAY    => [ @priority, "$_ALL" ],
        STYLE        => \@priority_colors,
        ARRAY_NUM_ID => 1
      }
    );

    $Msgs->{CHAPTER_SEL} = $html->form_select(
      'CHAPTER',
      {
        SELECTED => $Msgs->{CHAPTER} || $FORM{CHAPTER} || 0,
        SEL_MULTI_ARRAY => [ [ 0, "$_ALL" ], @{ $Msgs->chapters_list() } ],
        MULTI_ARRAY_KEY => 0,
        MULTI_ARRAY_VALUE => 1,
        MAIN_MENU         => get_function_index('msgs_chapters'),
        MAIN_MENU_AGRV    => "chg=$Msgs->{CHAPTER}"
      }
    );

    $Msgs->{PLAN_DATE} = "0000-00-00";
    $Msgs->{PLAN_TIME} = "00:00:00";

    $Msgs->{ADDRESS_TPL} = $html->tpl_show(templates('form_address'), $Msgs, { OUTPUT2RETURN => 1 });

    form_search({ SEARCH_FORM => $html->tpl_show(_include('msgs_request_search', 'Msgs'), { %$Msgs, %FORM }, { OUTPUT2RETURN => 1 }) });
  }

  $LIST_PARAMS{STATE}    = undef if ($FORM{STATE} == 3);
  $LIST_PARAMS{PRIORITY} = undef if ($FORM{PRIORITY} == 5);

  if (!defined($FORM{STATE}) && !$FORM{ALL_MSGS}) {
    $FORM{STATE} = 4;
  }

  my $i = 0;
  my $status_bar = (defined($FORM{STATE})) ? $html->button("$_ALL", "index=$index&ALL_MSGS=1$pages_qs") : $html->b($_ALL);

  foreach my $name (@msg_status) {
    if (defined($FORM{STATE}) && $FORM{STATE} == $i) {
      $LIST_PARAMS{STATE} = $FORM{STATE};
      $status_bar .= ' ' . $html->b($name);
    }
    else {
      $status_bar .= ' ' . $html->button("$name", "index=$index&STATE=$i$pages_qs");
    }
    $i++;
  }

  if (defined($FORM{ALL_MSGS})) {
    $pages_qs .= "&ALL_MSGS=1";
  }
  else {
    $pages_qs .= "&STATE=$FORM{STATE}";
  }

  $LIST_PARAMS{CHAPTERS} = $FORM{CHAPTER};
  my $list = $Msgs->unreg_requests_list({ %LIST_PARAMS, DESC => (!$FORM{sort}) ? 'DESC' : $FORM{desc} });

  my $table = $html->table(
    {
      width      => '100%',
      caption    => "$_MESSAGES",
      title      => [ '#', "$_DATE", "$_SUBJECT", "$_FIO", "$_CHAPTERS", "$_ADMIN", "$_STATUS", "$_PRIORITY", "$_CLOSED", "-", "-" ],
      cols_align => [ 'right', 'left', 'left', 'right', 'right', 'left', 'center', 'right', 'left', 'center:noprint', 'center:noprint' ],
      qs         => $pages_qs,
      pages      => $Msgs->{TOTAL},
      ID         => 'MSGS_LIST',
      header     => (
        ($#A_CHAPTER == -1)
        ? "<script language=\"JavaScript\" type=\"text/javascript\">
<!-- 
function CheckAllINBOX() {
  for (var i = 0; i < document.users_list.elements.length; i++) {
    if(document.users_list.elements[i].type == 'checkbox' && document.users_list.elements[i].name == 'del'){
      document.users_list.elements[i].checked =         !(document.users_list.elements[i].checked);
    }
  }
}
//-->
</script>
<a href=\"javascript:void(0)\" onClick=\"CheckAllINBOX();\">$_SELECT_ALL</a> \n"
        : ''
      )
      . $status_bar
    }
  );

  foreach my $line (@$list) {
    my $state = ($line->[6] == 0) ? $html->b($msg_status[ $line->[6] ]) : $msg_status[ $line->[6] ];

    $state .= '<img src="../img/red_dot.gif" border="0" alt="No reply"/>' if ($line->[16] eq '0000-00-00 00:00:00');

    #my $priority = $html->color_mark($priority[$line->[8]], $priority_colors[$line->[8]]);

    # Sort 	 Sort 	 Sort 	 Sort 	 Sort 	 Sort 	 Sort 	 Sort

    $table->addrow(
      $line->[0] . (($A_PRIVILEGES{ $line->[18] } > 2 || $#A_CHAPTER == -1) ? $html->form_input('del', "$line->[0]", { TYPE => 'checkbox' }) : ''),

      $html->button(
        $line->[1],
        "#",
        {
          NEW_WINDOW => "$SELF_URL?qindex=" . (($attr->{LIST_ONLY}) ? $index - 1 : $index) . "&chg=$line->[0]&header=1",
          NEW_WINDOW_SIZE => "640:600",
        }
      ),
      $line->[2],
      $line->[3],
      $line->[4],
      $line->[5],
      $state,
      $html->color_mark($priority[ $line->[7] ], $priority_colors[ $line->[7] ]),
      $line->[8],
      $html->button(
        $_SHOW, "#",
        {
          NEW_WINDOW => "$SELF_URL?qindex=" . (($attr->{LIST_ONLY}) ? $index - 1 : $index) . "&chg=$line->[0]&header=1",
          NEW_WINDOW_SIZE => "640:700",
          CLASS           => 'show'
        }
      ),

      (($A_PRIVILEGES{ $line->[18] } > 2 || $#A_CHAPTER == -1) ? $html->button($_DEL, "index=$index&del=$line->[0]$pages_qs", { MESSAGE => "$_DEL '$line->[0]' ?", CLASS => 'del' }) : '')
    );
  }

  my $total_msgs = $Msgs->{TOTAL};

  print $html->form_main(
    {
      CONTENT => $table->show(),    #$table2->show(),
      HIDDEN  => {
        index           => "$index",
        UID             => $FORM{UID},
        is_js_confirmed => 1,
        STATE           => $FORM{STATE}
      },
      SUBMIT => ($#A_CHAPTER == -1) ? { delete => $_DEL } : undef,
      NAME => 'users_list'
    }
  );

  $table = $html->table(
    {
      width      => '100%',
      cols_align => [ 'right', 'right' ],
      rows       => [ [ " $_TOTAL: ", $html->b($total_msgs) ] ]
    }
  );
  print $table->show();
}

#**********************************************************
#
#**********************************************************
sub msgs_unreg_requests {

  if ($FORM{add}) {
    $Msgs->unreg_requests_add({%FORM});
    $html->message('info', $_INFO, "$_SENDED") if (!$Msgs->{errno});
    if ($FORM{REGISTRATION_REQUEST}) {
      return 0;
    }
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }

  $Msgs->{ACTION}     = 'add';
  $Msgs->{LNG_ACTION} = $_SEND;

  $Msgs->{PRIORITY_SEL} = $html->form_select(
    'PRIORITY',
    {
      SELECTED => $FORM{PRIORITY} || 2,
      SEL_ARRAY    => \@priority,
      STYLE        => \@priority_colors,
      ARRAY_NUM_ID => 1
    }
  );

  $Msgs->{STATE_SEL} = $html->form_select(
    'STATE',
    {
      SELECTED     => $Msgs->{STATE},
      SEL_ARRAY    => \@msg_status,
      ARRAY_NUM_ID => 0
    }
  );

  $Msgs->{RESPOSIBLE} = $html->form_select(
    'RESPOSIBLE',
    {
      SELECTED => $Msgs->{RESPOSIBLE} || 0,
      SEL_MULTI_ARRAY => [ [ 0, $_ALL ], @{ $admin->list({ GIDS => $admins->{GIDS} }) } ],
      MULTI_ARRAY_KEY => 0,
      MULTI_ARRAY_VALUE => 1,
    }
  );

  $Msgs->{DATE}        = "$DATE $TIME";
  $Msgs->{CHAPTER_SEL} = $html->form_select(
    'CHAPTER',
    {
      SELECTED          => $Msgs->{CHAPTER},
      SEL_MULTI_ARRAY   => $Msgs->chapters_list({ CHAPTERS => $LIST_PARAMS{CHAPTERS} }),
      MULTI_ARRAY_KEY   => 0,
      MULTI_ARRAY_VALUE => 1,
      MAIN_MENU         => get_function_index('msgs_chapters'),
      MAIN_MENU_AGRV    => "chg=$Msgs->{CHAPTER}"
    }
  );

  if ($conf{ADDRESS_REGISTER}) {
    $Msgs->{ADDRESS_TPL} = $html->tpl_show(templates('form_address_sel'), $user_pi, { OUTPUT2RETURN => 1 });
  }
  else {
    my $countries = $html->tpl_show(templates('countries'), undef, { OUTPUT2RETURN => 1 });
    my @countries_arr = split(/\n/, $countries);
    my %countries_hash = ();

    foreach my $c (@countries_arr) {
      my ($id, $name) = split(/:/, $c);
      $countries_hash{ int($id) } = $name;
    }

    $Msgs->{COUNTRY_SEL} = $html->form_select(
      'COUNTRY',
      {
        SELECTED => $Msgs->{COUNTRY} || $FORM{COUNTRY},
        SEL_HASH => { '' => '', %countries_hash },
        NO_ID    => 1
      }
    );

    $Msgs->{ADDRESS_TPL} = $html->tpl_show(templates('form_address'), $Msgs, { OUTPUT2RETURN => 1 });
  }

  if ($FORM{REGISTRATION_REQUEST}) {
    if (in_array('Maps', \@MODULES)) {
      require "Abills/modules/Maps/webinterface";
      $Msgs->{MAPS} = google_maps_show_client({ OUTPUT2RETURN => 1 });
    }

    $html->tpl_show(_include('msgs_client_reg_request', 'Msgs'), $Msgs);
  }
  else {
    $html->tpl_show(_include('msgs_unreg_request', 'Msgs'), $Msgs);
    msgs_unreg_requests_list({ LIST_ONLY => 1 });
  }
}

#**********************************************************
#
#
#
#**********************************************************
sub msgs_registration {
  my ($attr) = @_;

  $FORM{REGISTRATION_REQUEST} = 1 if ($conf{MSGS_REG_REQUEST});
  if ($FORM{REGISTRATION_REQUEST}) {
    msgs_unreg_requests();

    return 0;
  }
  elsif ($FORM{reg}) {
    if ($attr->{CAPTCHA} && $attr->{CAPTCHA_OBJ}->check_code("$FORM{CCODE}", "$FORM{C}") != 1) {
      $Msgs->{MESSAGE} = $html->message('err', $_ERROR, "$ERR_WRONG_CAPTCHA");
    }
    elsif ($FORM{EMAIL} !~ /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/) {
      $Msgs->{MESSAGE} = $html->message('err', $_ERROR, "$_WRONG_EMAIL");
    }
    elsif (!$FORM{ACCEPT_RULES}) {
      $html->message('err', $_ERROR, "$ERR_ACCEPT_RULES");
    }
    else {
      my $password = mk_unique_value(8);

      my $user = $users->add(
        {
          LOGIN       => $FORM{LOGIN},
          CREATE_BILL => 1,
          PASSWORD    => $password
        }
      );
      my $message = '';
      if (!$user->{errno}) {
        my $UID = $user->{UID};
        $user = $user->info($UID);

        #3 personal info
        $user->pi_add(
          {
            %FORM,
            UID   => "$UID",
            FIO   => "$FORM{FIO}",
            EMAIL => "$FORM{EMAIL}",
          }
        );

        if ($user->{errno}) {
          $Msgs->{MESSAGE} = $html->message('err', $_ERROR, "[$user->{errno}] $err_strs{$user->{errno}}");
          goto REG_FORM;
        }
        else {
          $html->tpl_show(_include('msgs_reg_complete', 'Msgs'), { %$Msgs, %FORM });

          #Send mail to user
          my $message = $html->tpl_show(_include('msgs_reg_complete_mail', 'Msgs'), { %$Msgs, %FORM, PASSWORD => "$password" }, { OUTPUT2RETURN => 1 });
          sendmail("$conf{ADMIN_MAIL}", "$FORM{EMAIL}", "$_REGISTRATION", "$message", "$conf{MAIL_CHARSET}", '');
        }
        return 2;
      }
      else {
        if ($user->{errno} == 7) {
          $html->message('err', $_ERROR, "$_USER_EXIST");
        }
        else {
          $html->message('err', $_ERROR, "[$user->{errno}] $err_strs{$user->{errno}}");
        }
        goto REG_FORM;
      }
    }
  }

  REG_FORM:
  $html->tpl_show(_include('msgs_registration', 'Msgs'), { %$Msgs, %FORM, %$attr }, { ID => 'MSGS_REGISTRATION' });

  return 0;
}

#**********************************************************
#
#**********************************************************
sub msgs_survey_sel {
  my ($attr) = @_;

  my $list = $Msgs->survey_subjects_list({ PAGE_ROWS => 10000 });

  if ($Msgs->{TOTAL} > 0) {
    return $html->form_select(
      'SURVEY_ID',
      {
        SELECTED          => '',
        SEL_MULTI_ARRAY   => [ [ undef, "" ], @{$list} ],
        MULTI_ARRAY_KEY   => 0,
        MULTI_ARRAY_VALUE => 1,
      }
    );
  }

  return '';
}

#**********************************************************
#
#**********************************************************
sub msgs_survey {
  $Msgs->{ACTION}     = 'add';
  $Msgs->{LNG_ACTION} = $_ADD;

  if ($FORM{SURVEY}) {
    msgs_survey_questions();
    return 0;
  }
  elsif ($FORM{add}) {
    $Msgs->survey_subject_add({%FORM});

    $html->message('info', $_INFO, "$_ADDED") if (!$Msgs->{errno});
  }
  elsif ($FORM{change}) {

    $Msgs->survey_subject_change({%FORM});

    $html->message('info', $_INFO, "$_CHANGED") if (!$Msgs->{errno});
  }
  elsif ($FORM{chg}) {
    $Msgs->survey_subject_info($FORM{chg});

    $Msgs->{ACTION}     = 'change';
    $Msgs->{LNG_ACTION} = $_CHANGE;

    $html->message('info', $_INFO, "$_CHANGING") if (!$Msgs->{errno});
  }
  elsif ($FORM{del} && $FORM{is_js_confirmed}) {
    $Msgs->survey_subject_del({ ID => $FORM{del} });

    $html->message('info', $_INFO, "$_DELETED") if (!$Msgs->{errno});
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }

  $html->tpl_show(_include('msgs_survey_subject', 'Msgs'), $Msgs);
  my $list  = $Msgs->survey_subjects_list({%LIST_PARAMS});
  my $table = $html->table(
    {
      width      => '100%',
      caption    => "$_SURVEY",
      title      => [ '#', "$_NAME", "$_COMMENTS", "$_ADMINS", "$_CREATED", "-", "-", "-" ],
      cols_align => [ 'left', 'left', 'right', 'center:noprint', 'center:noprint' ],
      qs         => $pages_qs,
      ID         => 'SURVEY_LIST'
    }
  );

  foreach my $line (@$list) {
    $table->addrow(
      $line->[0], $line->[1], $line->[2], $line->[3], $line->[4],
      $html->button("$_QUESTIONS", "index=$index&SURVEY=$line->[0]", { CLASS => 'help' }),
      $html->button("$_CHANGE",    "index=$index&chg=$line->[0]",    { CLASS => 'change' }),
      $html->button($_DEL, "index=$index&del=$line->[0]", { MESSAGE => "$_DEL $line->[0]?", CLASS => 'del' })
    );
  }

  print $table->show();

}

#**********************************************************
#
#**********************************************************
sub msgs_survey_questions {
  $Msgs->{ACTION}       = 'add';
  $Msgs->{LNG_ACTION}   = $_ADD;
  $Msgs->{FILL_DEFAULT} = 1;

  if ($FORM{add}) {
    $Msgs->survey_question_add({%FORM});

    $html->message('info', $_INFO, "$_ADDED") if (!$Msgs->{errno});
  }
  elsif ($FORM{change}) {

    $Msgs->survey_question_change({%FORM});

    $html->message('info', $_INFO, "$_CHANGED") if (!$Msgs->{errno});
  }
  elsif ($FORM{chg}) {
    $Msgs->survey_question_info($FORM{chg});

    $Msgs->{ACTION}     = 'change';
    $Msgs->{LNG_ACTION} = $_CHANGE;

    $html->message('info', $_INFO, "$_CHANGING") if (!$Msgs->{errno});
  }
  elsif ($FORM{del} && $FORM{is_js_confirmed}) {
    $Msgs->survey_question_del({ ID => $FORM{del} });

    $html->message('info', $_INFO, "$_DELETED") if (!$Msgs->{errno});
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }

  $Msgs->{USER_COMMENTS} = ($Msgs->{USER_COMMENTS}) ? 'checked' : '';
  $Msgs->{FILL_DEFAULT}  = ($Msgs->{FILL_DEFAULT})  ? 'checked' : '';

  $html->tpl_show(_include('msgs_survey_question', 'Msgs'), $Msgs);
  my $list = $Msgs->survey_questions_list({ SURVEY => $FORM{SURVEY}, %LIST_PARAMS });
  my $table = $html->table(
    {
      width       => '100%',
      caption     => "$_SURVEY",
      title_plain => [ '#', "$_QUESTION", "$_PARAMS", "$_COMMENTS", "$_USER $_COMMENTS", $_DEFAULT, '-', '-' ],
      cols_align => [ 'left', 'left', 'right', 'center', 'center:noprint', 'center:noprint' ],
      qs         => $pages_qs,
    }
  );

  foreach my $line (@$list) {
    my $params = ($line->[3])
    ? $html->form_select(
      'PARAMS_' . $line->[0],
      {
        SELECTED     => '',
        SEL_ARRAY    => [ split(/;/, $line->[3]) ],
        ARRAY_NUM_ID => 1
      }
    )
    : '';
    $table->addrow(
      $line->[0], $line->[1], $line->[2], $params,
      ($line->[4]) ? $html->form_input('USER_COMMENTS', '') : '',
      $bool_vals[ $line->[5] ],
      $html->button("$_CHANGE", "index=$index&chg=$line->[6]&SURVEY=$FORM{SURVEY}", { CLASS => 'change' }),
      $html->button($_DEL, "index=$index&del=$line->[6]&SURVEY=$FORM{SURVEY}", { MESSAGE => "$_DEL $line->[0]?", CLASS => 'del' })
    );
  }

  print $table->show();
}

#**********************************************************
#
#**********************************************************
sub msgs_survey_show {
  my ($attr) = @_;
  my %answers = ();

  if ($FORM{change}) {
    $FORM{UID} = $user->{UID} || $LIST_PARAMS{UID};

    $Msgs->survey_answer_add({ %FORM, MSG_ID => $FORM{ID} });
    delete $FORM{change};
    $html->message('info', $_INFO, "$_SENDED");
    $FORM{change} = undef;
  }

  if ($Msgs->{errno}) {
    $html->message('err', $_ERROR, "[$Msgs->{errno}] $err_strs{$Msgs->{errno}}");
  }

  my $list = $Msgs->survey_answer_show(
    {
      SURVEY_ID => $attr->{SURVEY_ID},
      UID       => $user->{UID} || $LIST_PARAMS{UID},
      MSG_ID    => $attr->{MSG_ID},
      REPLY_ID  => $attr->{REPLY_ID} || 0
    }
  );
  my $answer_date = '';
  if ($Msgs->{TOTAL} > 0) {
    foreach my $line (@$list) {
      $answers{ $line->[0] }{ANSWER}   = $line->[2];
      $answers{ $line->[0] }{COMMENTS} = $line->[3];
      $answer_date                     = $line->[4];
    }
  }
  else {
    $Msgs->{ACTIVE_SURWEY} = 1;
  }

  $Msgs->survey_subject_info($attr->{SURVEY_ID});
  $list = $Msgs->survey_questions_list({ SURVEY => $attr->{SURVEY_ID}, COLS_NAME => 1 });

  my $table = $html->table(
    {
      width      => '100%',
      caption    => "$_SURVEY - $Msgs->{NAME}" . (($answer_date ne '') ? " ($answer_date)" : ''),
      cols_align => [ 'left', 'left', 'right', 'center:noprint', 'center:noprint' ],
      qs         => $pages_qs,
    }
  );

  foreach my $line (@$list) {
    my @params_arr = split(/;/, $line->{params});

    if (scalar(keys %answers) > 0) {
      if (defined($answers{ $line->{id} }{ANSWER})) {
        $table->addrow('', $line->{num}, $html->b($line->{question}) . $html->br() . $line->{params}, $params_arr[ $answers{ $line->{id} }{ANSWER} ], $answers{ $line->{id} }{COMMENTS});
      }
    }
    else {
      my $params = ($line->{params})
      ? $html->form_select(
        'PARAMS_' . $line->{id},
        {
          SELECTED => (defined($answers{ $line->{fill_default} })) ? $answers{ $line->{fill_default} }{ANSWER} : '',
          SEL_ARRAY    => \@params_arr,
          ARRAY_NUM_ID => 1,
          NO_ID        => 1
        }
      )
      : '';
      $table->addrow(
        ($user->{UID}) ? '-' : $html->form_input(FILL_DEFAULT, "$line->{id}", { TYPE => 'checkbox', STATE => ($line->{fill_default}) ? 1 : undef }),
        $html->form_input('IDS', $line->{id}, { TYPE => 'hidden', OUTPUT2RETURN => 1 }) . $line->{num},
        $html->b($line->{question}) . $html->br() . $line->{comments},
        $params, ($line->{user_comments}) ? $html->form_input('USER_COMMENTS_' . $line->{id}, ((defined($answers{ $line->{id} })) ? $answers{ $line->{id}}{COMMENTS} : ''), { SIZE => 60, OUTPUT2RETURN => 1 }) : '',
      );
    }
  }

  my $del_button = '';
  if ($attr->{REPLY_ID}) {
    $del_button = $html->button($_DEL, "&index=$index&chg=$FORM{chg}&UID=$Msgs->{UID}&SURVEY_ID=$attr->{SURVEY_ID}" . (($attr->{MAIN_MSG}) ? "&MSG_ID=$attr->{MAIN_MSG}&reply_del=1" : "&reply_del=$attr->{REPLY_ID}&REPLY_ID=$attr->{REPLY_ID}"), { MESSAGE => "$_DEL $line->[0]?", BUTTON => 1 });
  }

  if (scalar(keys %answers) > 0) {
    return $table->show({ OUTPUT2RETURN => 1 }) . (($user->{UID}) ? '' : $del_button);
  }
  else {
    return $html->tpl_show(
      _include('msgs_survey', 'Msgs'),
      {
        %$Msgs,
        ACTION     => 'change',
        LNG_ACTION => "$_SEND",
        SURVEY_ID  => $attr->{SURVEY_ID},
        SURVEY     => $table->show({ OUTPUT2RETURN => 1 }),
        DELETE     => ($user->{UID}) ? '' : $del_button,
        REPLY_ID   => $FORM{REPLY_ID}
      },
      { OUTPUT2RETURN => 1 }
    );
  }
}

#**********************************************************
#
#**********************************************************
sub msgs_chapters_menu {
  my ($attr) = @_;

  #Get admin privileges
  #  my $a_list = $Msgs->admins_list({ AID => $admin->{AID} });
  #  my %A_PRIVILEGES        = ();
  #  my %CHAPTERS_DELIGATION = ();
  #  foreach my $line (@$a_list) {
  #  	if ($line->[5] > 0) {
  #  	  push @A_CHAPTER, "$line->[5]:$line->[3]";
  #  	  $CHAPTERS_DELIGATION{$line->[5]}=$line->[3];
  #  	  $A_PRIVILEGES{$line->[5]}=$line->[2];
  #  	 }
  #   }
  #
  #  if (scalar keys %CHAPTERS_DELIGATION > 0) {
  #    $LIST_PARAMS{CHAPTERS_DELIGATION} = \%CHAPTERS_DELIGATION;
  #    $LIST_PARAMS{PRIVILEGES}          = \%A_PRIVILEGES;
  #    $LIST_PARAMS{UID}      = undef if (! $FORM{UID});
  #   }
  #
  #  $Msgs->{debug}=1;
  #  my $list = $Msgs->messages_list({ %LIST_PARAMS,
  #  	                                DESC       => (! $FORM{sort}) ? 'DESC' : $FORM{desc}
  #  	                               });
  #
  # foreach my $line (@$list) {
  # 	 print "$line->[0] <br>";
  #  }

}

1

