Amilman / Joyreactor advanced script for Maxthon

/**
Адаптация проекта под Maxthon: Amilman (http://joyreactor.cc/user/Amilman)
Adaptation of the project under the Maxthon: Amilman
**/
// ==UserScript==
// @name        Joyreactor advanced script for Maxthon
// @namespace   joyreactor.cc
// @description comment tree collapse, remove/hide posts/comments by username/tag, remove share buttons and more
// @description http://joyreactor.cc/tag/jras
// @include     *reactor.cc*
// @include     *joyreactor.cc*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js
// @require     https://code.jquery.com/ui/1.11.4/jquery-ui.min.js
// @version     1.3.18
// @author      AntiUser (http://joyreactor.cc/user/AntiUser)
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_listValues
// @grant       GM_deleteValue
// @grant       GM_xmlhttpRequest
// ==/UserScript==

/* RELEASE NOTES
  2.3.18
    + Диалог настроек закрывается при нажатии "сохранить"
  2.3.17
    + опция "Убирать цветовую отметку донатера" в тултипах [false]
    + опция при каком количестве медальки скрывать [60] (0 - показывать все)
    * опция сколько показывать, если скрывать  [40]
    * добавлены кнопки в GUI настроек
      - Отправить мне персональное сообщение
      - Удалить все сохраненные данные
      - Настройки по умолчанию
    * поправлены медальки в тултипе
    + дерево комментариев теперь строится также и в старом дизайне при разворачивании коментов в ленте
    + для комментариев маленькая кнопка collapseToParent при отсутствии большой collapseNode рисуется выше
    * поправлена высота ника в тултипе
    * мелкие исправления
  1.3.6
    + сворачивание комментариев наверх к паренту
    * не блокировался юзер в коментариях при раскрытии их в ленте в новом дизайне
  1.3.2
    + отправка сообщения пользователю из tooltip'а 
    + возможность ограничить количество сразу выводимых в tooltip'е медалек
    + плавающая верхняя панель в новой дизайне
    + автоматическая отметка коментариев как прочитанных при сворачивании ветки
    + настройки сохраняются для каждого пользователя реактора отдельно
    + добавлены опции для настройки работы скрипта
      - создавать ли дерево коментариев [true]
      - дерево коментариев только для полного поста (в ленте при раскрытии не будет создаваться) [false]
      - когда ветка коментариев сворачивается все дочерние коменты помечаются прочитанными [true]
      - загружать ли данные пользователя для Tooltip'а [true]
      - сколько медалек показывать при загрузке [40] (0 - все)
      - зафиксировать верхнюю панель наверху окна (только новый дизайн) [true]
      - скрывать зафиксированную верхнюю панель (только новый дизайн) [true]
      - показывать Tooltip'ы в ленте [true]
      - показывать Tooltip'ы в коментариях [true]
      - показывать Tooltip'ы на странице ПМ [true]
      - показывать Tooltip'ы на странице Люди [true]
      - показывать Tooltip'ы в правом баре для юзеров топа [true]
      - показывать Tooltip'ы в правом баре для аватарок [true]
    * мелкие исправления
  1.2.3
    - некоторый фунционал был удален
        Если вы обнаружили его недостачу и он вам нужен - пишите ПМ
  1.2.2
    * добавиил tooltip'ы на:
      - страница личных сообщений
      - страница люди
      - топы в правой колонке
      - на авах в правой колонке
    * мелкие исправления
  1.2.0
    + просмотр информации по пользователю при наведении мыши на его ник
    + возможность добавить в друзья, заблокировать пользователя из tooltip'а
    * мелкие исправления
  1.1.3
    * в хроме на новом дизайне не строилось дерево коментариев при раскрытии их в ленте
    * по той же причине не блокировались коментарии пользователей
  1.1.0
    + GUI для настройки JRAS
    * не блокировались теги на новом дизайне
  1.0.6
    * в список заблокированных тегов, котрый выводится при блокировке поста
      могло попасть содержимое поста, а не только теги
  1.0.5
    * в случае нахождения блокированного юзера в коментах, мог быть заблокирован пост
  1.0.2
    * Не работал в хроме из-за неверного определения адреса документа
  1.0.0
    + release


  TODO:
    Больше инфы в тултипе юзеров
    Имаджи в коментах
*/

(function(){

  'use strict';

  console.log(' ================ start JRAS');

  var curLng = initLng();

  var isUserLogon = $('li.login.lastitem a').is('#logout');
  var currentUser = isUserLogon ? $.trim($('li.login a#settings').text()) : 'Anonymous';
  //   console.log('isUserLogon - ' + isUserLogon + ' ::: userName - ' + currentUser);

  var userOptions = initOptions();
  userOptions.loadUserData();

  var colorScheme = {
    scheme: getColorScheme(),  // light or dark
    isLight: function(){
      return this.scheme == 'light'
    }
  };
  var currentPage = unsafeWindow.location.href;
  var isNewDesign = isNewVersion(currentPage);

  addNewCSSClasses();
  makePropElements();

  var BlockUsersAsFindStr = 'a:contains(' + userOptions.data.BlockUsers.join('), a:contains(') + ')';

  removeElementsByClass('a', ['share_vk', 'share_fb', 'share_twitter', 'share_mail']);
  userRemove(userOptions.data.BlockUsers);
  tagRemove(userOptions.data.BlockTags, true);
  makeAllTooltip();
  procTopbar();

  if (pageIs('post')){
    correctImageInComment();
    if(userOptions.val('makeTreeComments')){
      makeTreeComments();
    }
  }

  subscribeShowComment();

  console.log(' ================ end JRAS');


  //=====================================================================================================

  function initOptions(){
    var retVal = {
      data: {
        currentLng: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_SELECTLANGUAGE')
          }
        },
        makeTreeComments: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_MAKETREECOMMENTS')
          }
        },
        treeCommentsOnlyFullPost: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_TREECOMMENTSONLYFULLPOST')
          }
        },
        whenCollapseMakeRead: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_WHENCOLLAPSEMAKEREAD')
          }
        },
        isToBeLoadingUserData: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_ISTOBELOADINGUSERDATA')
          }
        },
        hideUserAwardsWhen: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_HIDEUSERAWARDSWHEN')
          }
        },
        minShowUserAwards: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_MINSHOWUSERAWARDS')
          }
        },
        fixedTopbar: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_FIXEDTOPBAR')
          }
        },
        hideFixedTopbar: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_HIDEFIXEDTOPBAR')
          }
        },
        showTooltipOnLine: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_SHOWTOOLTIPONLINE')
          }
        },
        showTooltipOnComment: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_SHOWTOOLTIPONCOMMENT')
          }
        },
        showTooltipOnPrivateMess: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_SHOWTOOLTIPONPRIVATEMESS')
          }
        },
        showTooltipOnPeople: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_SHOWTOOLTIPONPEOPLE')
          }
        },
        showTooltipOnSidebarTopUsers: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_SHOWTOOLTIPONSIDEBARTOPUSERS')
          }
        },
        showTooltipOnSidebarOnline: {
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_SHOWTOOLTIPONSIDEBARONLINE')
          }
        },
        chatlaneToPacaki: {   // Убирать цветовую отметку донатера
          dt: null,
          guiDesc: function(){
            return curLng.getVal('JRAS_GUI_CHATLANETOPACAKI')
          }
        },
        BlockUsers: [],
        BlockTags: []
      },

      val: function(option, value){
        if(this.data[option]){
          if(value === undefined){
            return this.data[option].dt
          }else{
            this.data[option].dt = value;
          }
        }
      },
      getGuiDesc: function(option){
        return this.data[option].guiDesc();
      },

      setDef: function(){
        this.data.currentLng.dt = 'ru';
        this.data.makeTreeComments.dt = true;
        this.data.treeCommentsOnlyFullPost.dt = false;
        this.data.whenCollapseMakeRead.dt = true;
        this.data.isToBeLoadingUserData.dt = true;
        this.data.hideUserAwardsWhen.dt = 60;
        this.data.minShowUserAwards.dt = 40;
        this.data.fixedTopbar.dt = true;
        this.data.hideFixedTopbar.dt = true;
        this.data.showTooltipOnLine.dt = true;
        this.data.showTooltipOnComment.dt = true;
        this.data.showTooltipOnPrivateMess.dt = true;
        this.data.showTooltipOnPeople.dt = true;
        this.data.showTooltipOnSidebarTopUsers.dt = true;
        this.data.showTooltipOnSidebarOnline.dt = true;
        this.data.chatlaneToPacaki.dt = false;
        this.data.BlockUsers = [];
        this.data.BlockTags = [];
      },

      removeAllSavedData: function(){
        this.removeSavedUserData();
      },

      removeSavedUserData: function(user){
        var pref = (user === undefined) ? '' : user + '_';
        var keys = GM_listValues();
        for(var i = 0; i < keys.length; i++){
          var key = keys[i];
          if(!key.match(new RegExp(pref + '.*'))){
            continue
          }
          GM_deleteValue(key);
        }
      },

      saveUserData: function(){
        var i;
        this.removeSavedUserData(currentUser);
        var pref = currentUser + '_';

        for(i in this.data){
          if((i == 'BlockUsers') || (i == 'BlockTags')){
            continue
          }
          GM_setValue(pref + i, this.data[i].dt);
        }
        for(i = 0; i < this.data.BlockUsers.length; i++){
          GM_setValue(pref + 'BlockUsers_name_' + i, this.data.BlockUsers[i]);
        }
        for(i = 0; i < this.data.BlockTags.length; i++){
          GM_setValue(pref + 'BlockTags_name_' + i, this.data.BlockTags[i]);
        }
      },

      loadUserDataFrom: function(prefix){
        var retVal = false;
        var posf = '.*';

        var keys = GM_listValues();
        this.data.BlockUsers = [];
        this.data.BlockTags = [];
        for(var i = 0; i < keys.length; i++){
          var key = keys[i];
          if(!key.match(new RegExp(prefix + posf))){
            continue
          }
          if(key.match(new RegExp(prefix + 'BlockUsers_name_' + posf))){
            this.data.BlockUsers.push(GM_getValue(key, ''));
          }else{
            if(key.match(new RegExp(prefix + 'BlockTags_name_' + posf))){
              this.data.BlockTags.push(GM_getValue(key, ''));
            }else{
              var rkey = key.replace(prefix, '');
              if(this.data[rkey] === undefined){
                continue
              }
              this.data[rkey].dt = GM_getValue(key, this.data[rkey]);
              retVal = true;
            }
          }
        }
        this.data.BlockUsers.sort();
        this.data.BlockTags.sort();
        return retVal;
      },

      loadUserData: function(){
        if(this.loadUserDataFrom(currentUser + '_')){
          return
        }
        if(this.loadUserDataFrom('')){
          this.saveUserData();
        }
      }

    };

    retVal.setDef();
    return retVal;
  }

  function getColorScheme(){
    var c = $('body').css('background-color');
    var rgb = (/^#[0-9A-F]{6}$/i.test(c)) ? c : c.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
    var mono = parseInt((0.2125 * rgb[1]) + (0.7154 * rgb[2]) + (0.0721 * rgb[3]), 10);
    return (mono <= 128) ? 'dark' : 'light';
  }

  function makeAllTooltip(){
    var sel = [];
    if(userOptions.val('showTooltipOnLine')){
      sel.push('div.uhead_nick > a');
    }
    if(userOptions.val('showTooltipOnComment')){
      sel.push('span.reply-link > a:first-child');
    }
    if(userOptions.val('showTooltipOnPrivateMess')){
      sel.push('div.mess_from > a');
    }
    if(userOptions.val('showTooltipOnPeople')){
      sel.push('div.user > div.userblock > a');
    }
    if(userOptions.val('showTooltipOnSidebarTopUsers')){
      sel.push('div.user.week_top > a');
    }
    if(userOptions.val('showTooltipOnSidebarOnline')){
      sel.push('div.avatar_holder > a');
    }
    if(sel.length != 0){
      makeTooltips(sel.join(', '));
    }
  }

  function removeElementsByClass(elm, removeClassArr){
    if(removeClassArr == null){
      return
    }
    for(var i = 0; i < removeClassArr.length; i++){
      $(elm + '.' + removeClassArr[i]).each(function(){
        $(this).remove();
      })
    }
  }

  function procTopbar(){
    if (!isNewDesign){return}
    if(userOptions.val('fixedTopbar')){
      $('#topbar.topbar_wr').css({'position': 'fixed', 'background': 'rgba(57, 47, 30, 0.85) none repeat scroll 0% 0%'});
      if(userOptions.val('hideFixedTopbar')){
        var checkPos = function(){
          var $topbar = $('#topbar.topbar_wr');
          if($(window).scrollTop() < 38){
            $topbar.find('.topbar_inner').removeClass('jras-topbar_inner');
            $topbar.removeClass('jras-topbar_wr');
          }else{
            $topbar.find('.topbar_inner').addClass('jras-topbar_inner');
            $topbar.addClass('jras-topbar_wr');
          }
        };
        checkPos();
        $(window).scroll(function(){
          checkPos();
        });
      }
    }
  }

  function userRemove(userNameArr){
    $(BlockUsersAsFindStr).parent('div.uhead_nick').closest('div.article').each(function(idx, elm){
      var currentUser = $(this).find(BlockUsersAsFindStr).text();
      if(userNameArr.indexOf(currentUser) != -1){
        //       $(this).remove(); // для просто удаления
        //       return;
        elm.parentElement.style.paddingBottom = '40px';
        makeBlockPostElements(elm, elm.parentElement.id, curLng.getVal('JRAS_POSTBLOCKBYUSER'), currentUser);
        console.info('  user - ' + currentUser + ' : hide post - ' + elm.parentElement.id);
        $(this).hide();
      }
    });
    $(BlockUsersAsFindStr).parent('span.reply-link').closest('div[id^=comment_txt_].txt').each(function(idx, elm){
      var currentUser = $(this).find(BlockUsersAsFindStr).text();
      if(userNameArr.indexOf(currentUser) != -1){
        //       $(this).remove(); // для просто удаления. Будет пустой комент
        //       return;
        makeBlockCommElements(elm, elm.parentElement.id, curLng.getVal('JRAS_COMMBLOCKBYUSER'), currentUser);
        console.info('  user - ' + currentUser + ' : hide comment - ' + elm.parentElement.id);
        $(this).hide();
      }
    })
  }

  function tagRemove(tagNameArr, strictComp){
    var findStr = 'a:contains(' + tagNameArr.join('), a:contains(') + ')';
    //     findStr = ':contains(Anime):not(:contains(Anime Coub))'; // тест варианта условной блокировки

    $('.taglist ' + findStr).closest('div.article').each(function(idx, elm){
      var foundTagStr = '';
      var validTag = strictComp !== true;
      $(this).find('.taglist').find(findStr).text(function(index, text){
        if(strictComp === true){
          validTag = validTag || tagNameArr.indexOf(text) != -1;
        }
        foundTagStr += ' "' + text + '"';
      });
      if(validTag){
        //       $(this).remove(); // для просто удаления
        //       return;
        elm.parentElement.style.paddingBottom = '40px';
        makeBlockPostElements(elm, elm.parentElement.id, curLng.getVal('JRAS_POSTBLOCKBYTAG'), foundTagStr);
        console.info('hide post by tag - ' + foundTagStr);
        $(this).hide();
      }
    })
  }

  function correctImageInComment(){
    $('div[id^=comment].comment>div[id^=comment_txt_].txt>div.image').each(function(idx, elm){
      //console.log(elm);
    })
  }


  function makeTreeComments(){
    $('div[id^=comment].comment').each(function(idx, elm){
      makeTreeCommentNode(elm, elm.id.replace('comment', ''));
    })
  }

  function subscribeShowComment(){
    var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
    var observer = new MutationObserver(function(mutations){
      mutations.forEach(function(mutation){
        if (mutation.type === 'childList'){
          if (userOptions.val('showTooltipOnComment')){
            makeTooltips($(mutation.addedNodes).find('span.reply-link > a:first-child'), 'a');
          }
          for (var i = 0; i < mutation.addedNodes.length; i++){
            var itm = mutation.addedNodes[i];
            if (userOptions.val('makeTreeComments') && !userOptions.val('treeCommentsOnlyFullPost')){
              if ($(itm).is('div[id^=comment_list_post].comment_list_post')){
                $(itm).find('div[id^=comment].comment').each(function(idx, elm){
                  makeTreeCommentNode(elm, elm.id.replace('comment', ''));
                })
              }
            }
            $(itm).find(BlockUsersAsFindStr).closest('div[id^=comment_txt_].txt').each(function(idx, elm){
              var currUser = $.trim($(this).find(BlockUsersAsFindStr).text());
              if (userOptions.data.BlockUsers.indexOf(currUser) != -1){
                makeBlockCommElements(elm, elm.parentElement.id, curLng.getVal('JRAS_COMMBLOCKBYUSER'), currUser);
                $(this).hide();
              }
            })
          }
        }
      });
    });

    $('div.post_comment_list').each(function(idx, elm){
      observer.observe(elm, {
        characterData: true,
        childList: true,
        subtree: true
      });
    })
  }

  function makeTreeCommentNode(elm, commentID){
    if($('span#treeColl' + commentID)[0]){
      return
    }

    var collapseToParent = function(design){
      var retVal = null;
      var $parentElm = $(elm).parent();
      if($parentElm.prev().is('div[id^=comment].comment') && $(elm).is(':not(:first-child)')){
        // если парент elm - div#comment???.comment и elm не первый чилд
        var parentNodeID = $parentElm.prop('id');
        var $newElm = $(elm).prepend(design.replace('##parentNodeID##', parentNodeID))
          .find('div#jras-colltoparent-' + commentID);

        $newElm.click(function(){
            var $par = $('div#' + $(this).attr('parentNodeID'));
            var currID = $(this).parent().prop('id');
            var $child = $par.find('>:first-child');
            while($child.prop('id') != currID){
              $child.find('>div[id^=jras-treecomm]:first-child').click();
              $child = $child.next();
            }
            // далее происходит следующее
            // сдвигаем все вверх, так чтобы парент был на четверть экрана ниже верхней границы
            // когда анимация закончится проверим виден ли основной комент
            // если он находится ниже видимой области экрана,
            // то сдвинем парент на самый верх экрана
            // и помигаем :)
            $('html, body')
              .animate({
                scrollTop: $par.prev().offset().top - (unsafeWindow.innerHeight / 4)
              }, {
                complete: function(){
                  if($(elm).offset().top > unsafeWindow.pageYOffset + unsafeWindow.innerHeight){
                    $('html, body')
                      .animate({
                        scrollTop: $(elm).parent().prev().offset().top - 20
                      }, 'slow');
                  }
                  for(var i = 0; i < 3; i++){
                    $(elm).parent().prev().fadeTo('fast', 0.1).fadeTo('fast', 1.0);
                    $(elm).fadeTo('fast', 0.1).fadeTo('fast', 1.0);
                  }
                }
              });
          });
        retVal = $newElm;
      }
      return retVal;
    };

    var $collToPar;
    var needCoolTree = $(elm).next().children().length != 0;

    if(isNewDesign){
      $collToPar = collapseToParent(
	  '<div id="jras-colltoparent-' + commentID + '" parentNodeID="##parentNodeID##" class="treeCross-new treeCross-new-toparent">' +
            '<t style="position: absolute;margin-left: 3px;margin-top: -5px;font-size: 11px;font-weight: bold;">^</t></div>');
      if(needCoolTree){
        $(elm).prepend(
		'<div id="jras-treecomm-' + commentID + '" class="treeCross-new">' +
          '<span id="treeColl' + commentID + '" style="margin-left: 1px; margin-top: -10px;">-</span></div>')
        .find('div#jras-treecomm-' + commentID)
          .click(function(){
            var $toggleContainer = $('#comment_list_comment_' + commentID);
            var $treeColl = $('span#treeColl' + commentID);
            if($toggleContainer.css('display') == 'none'){
              $treeColl.text('-');
              $treeColl.css('margin-left', '1px');
            }else{
              $treeColl.text('+');
              $treeColl.css('margin-left', '-1px');
              if(userOptions.val('whenCollapseMakeRead')){
                $toggleContainer.find('div.new').removeClass('new');
              }
            }
            $toggleContainer.slideToggle('display');
          });
      }
      if($collToPar !== null || needCoolTree){
        $(elm).find('>div.txt').css('padding-left', '15px');
        if($collToPar !== null && !needCoolTree){
          $collToPar.css('margin-top', '-3px')
        }
      }
    }else{
      $collToPar = collapseToParent(
	  '<div id="jras-colltoparent-' + commentID + '"  parentNodeID="##parentNodeID##" class="comment treeCross-old treeCross-old-toparent">' +
        '<t style="margin-left: -4px;margin-top: -3px;position: absolute;font-size: 8px;">^</t></div>');

      if(needCoolTree){
        $(elm).prepend(
		'<div id="jras-treecomm-' + commentID + '" class="comment treeCross-old">'+
            '<span id="treeColl' + commentID + '" style="margin-left: 0;">-</span></div>')
        .find('div#jras-treecomm-' + commentID)
          .click(function(){
            var $toggleContainer = $('#comment_list_comment_' + commentID);
            var $treeColl = $('span#treeColl' + commentID);
            if($toggleContainer.css('display') == 'none'){
              $treeColl.text('-');
              $treeColl.css('margin-left', '0px');
            }else{
              $treeColl.text('+');
              $treeColl.css('margin-left', '-2px');
              if(userOptions.val('whenCollapseMakeRead')){
                $toggleContainer.find('div.new').removeClass('new');
              }
            }
            $toggleContainer.slideToggle('display');
          });
        $(elm).find('>div.avatar')
          .addClass('avatarCorrect')
          .css('left', '-10px');
      }
      if($collToPar !== null || needCoolTree){
        $(elm).find('>div.avatar').addClass('avatarCorrect').css('left', '-10px');
        if($collToPar !== null && !needCoolTree){
          $collToPar.css({'margin-top': '-3px', 'margin-left': '-36px'})
        }
      }
    }
  }

  function makePropElements(){
    if(isNewDesign){
      $('div.topbar_right:first div.lang_select').after(
        '<label id="jras_prop-button" style="cursor: pointer;" class="lang_select" for="modal-1">JRAS</label>'
      );
      $('label#jras_prop-button').click(openProp);
    }else{
      $('div#header:first div.lang_select').after(
        '<label id="navcontainer" class="lang_select" for="modal-1"' +
          'style="cursor: pointer; right: 39px; padding: 1px 2px 2px;' +
          'font-size: 9px; border-radius: 0 0 5px 5px; height: 17px; cursor: pointer;' +
          'background: transparent url("../images/mainmenu_active_bg1.png") repeat-x scroll 0 0;">' +
          'JRAS' +
        '</label>');
      $('div#header:first div.lang_select + label').click(openProp);
    }
    $('body').append(
      '<div id="jras-prop-gui-dialog">' +
        '<input class="modal-state" id="modal-1" type="checkbox" />' +
        '<div class="modal">' +
          '<label class="modal__bg" for="modal-1"></label>' +
          '<div class="modal__inner">' +
            '<div class="jras-prop-gui-contentTop">' +
              '<span style="color: #8B857B;font-weight: bold; line-height: 27px; padding-left: 8px;">' +
                'JRAS - JoyReactor Advanced Script' +
              '</span>' +
              '<label class="modal__close" for="modal-1"></label>' +
            '</div>' +
            '<div class="jras-prop-gui-contentMain">' +
             ' <div id="jras-prop-gui-tabs" style="border: 0 none;">' +
                '<ul class="jras-tabs-nav">' +
                  '<li id="jras-tabs-nav-0"><a href="#jras-prop-gui-tab-1">Общие</a></li>' +
                  '<li id="jras-tabs-nav-1"><a href="#jras-prop-gui-tab-2">Блокировки</a></li>' +
                  '<li id="jras-tabs-nav-2"><a href="#jras-prop-gui-tab-3">Tooltip`ы</a></li>' +
                '</ul>' +
                '<div id="jras-prop-gui-tab-1" class="jras-tabs-panel">' +
                 '<div class="jras-tabs-panel-content">' +
                    '<section class="jras-prop-gui-section">' +
                      '<span id="jras-gui-SelectLngCaption" style="vertical-align: middle;"></span>' +
                      '<select id="jras-gui-SelectLngcbb" name="jras-lngSelect" style="vertical-align: middle; width: 30%;height: 1.4em;;">' +
                      '</select>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-makeTreeCommentsVal" type="checkbox" style="vertical-align: middle;"/>' +
                     '<label id="jras-gui-makeTreeCommentsCaption" for="jras-gui-makeTreeCommentsVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                   '</section>' +
                   '<section class="jras-prop-gui-section">' +
                     '<input id="jras-gui-treeCommentsOnlyFullPostVal" type="checkbox" style="vertical-align: middle;"/>' +
                     '<label id="jras-gui-treeCommentsOnlyFullPostCaption" for="jras-gui-treeCommentsOnlyFullPostVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                   '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-whenCollapseMakeReadVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-whenCollapseMakeReadCaption" for="jras-gui-whenCollapseMakeReadsVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-fixedTopbarVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-fixedTopbarCaption" for="jras-gui-fixedTopbarVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-hideFixedTopbarVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-hideFixedTopbarCaption" for="jras-gui-hideFixedTopbarVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                  '</div>' +
                '</div>' +
                '<div id="jras-prop-gui-tab-2" class="jras-tabs-panel">' +
                  '<div class="jras-tabs-panel-content">' +
                    '<span id="jras-guiBlockUserListCaption"></span>' +
                    '<textarea id="jras-guiBlockUserList" style="width: 98%; border: 1px solid rgb(216, 216, 216); height: 139px;">' +
                    '</textarea>' +
                    '<span id="jras-guiBlockTagListCaption"></span>' +
                    '<textarea id="jras-guiBlockTagList" style="width: 98%; border: 1px solid rgb(216, 216, 216); height: 139px;">' +
                    '</textarea>' +
                  '</div>' +
                '</div>' +
                '<div id="jras-prop-gui-tab-3" class="jras-tabs-panel">' +
                  '<div class="jras-tabs-panel-content">' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-isToBeLoadingUserDataVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-isToBeLoadingUserDataCaption" for="jras-gui-isToBeLoadingUserDataVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                   '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-showTooltipOnLineVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-showTooltipOnLineCaption" for="jras-gui-showTooltipOnLineVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-showTooltipOnCommentVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-showTooltipOnCommentCaption" for="jras-gui-showTooltipOnCommentVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-showTooltipOnPrivateMessVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-showTooltipOnPrivateMessCaption" for="jras-gui-showTooltipOnPrivateMessVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-showTooltipOnPeopleVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-showTooltipOnPeopleCaption" for="jras-gui-showTooltipOnPeopleVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-showTooltipOnSidebarTopUsersVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-showTooltipOnSidebarTopUsersCaption" for="jras-gui-showTooltipOnSidebarTopUsersVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-showTooltipOnSidebarOnlineVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-showTooltipOnSidebarOnlineCaption" for="jras-gui-showTooltipOnSidebarOnlineVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<span id="jras-gui-hideUserAwardsWhenCaption" style="vertical-align: middle;"></span>' +
                      '<select id="jras-gui-hideUserAwardsWhencbb" name="jras-hideUserAwardsWhen" style="vertical-align: middle; width: 60px;height: 20px;">' +
                      '</select>' +
                      '<span id="jras-gui-minShowUserAwardsCaption" style="vertical-align: middle;margin-left: 3px;"></span>' +
                      '<select id="jras-gui-minShowUserAwardscbb" name="jras-minShowUserAwards" style="vertical-align: middle; width: 60px;height: 20px;">' +
                      '</select>' +
                    '</section>' +
                    '<section class="jras-prop-gui-section">' +
                      '<input id="jras-gui-chatlaneToPacakiVal" type="checkbox" style="vertical-align: middle;"/>' +
                      '<label id="jras-gui-chatlaneToPacakiCaption" for="jras-gui-chatlaneToPacakiVal" style="cursor: pointer;vertical-align: middle;"> </label>' +
                    '</section>' +
                  '</div>' +
                '</div>' +
              '</div>' +
            '</div>' +
            '<div  id="jras-prop-gui-bottomCcontent" class="jras-prop-gui-contentBottom">' +
              '<input id="jras-gui-SaveSettings" style="padding-left: 20px; padding-right: 20px; height: 22px;" class="jras-prop-gui-button-right" value="" type="button">' +
            '</div>' +
          '</div>' +
        '</div>' +
      '</div>');

    var $propDialog = $('#jras-prop-gui-dialog');
    $propDialog.find('select#jras-gui-SelectLngcbb').append(curLng.getHTMLList());
    $propDialog.find('select#jras-gui-hideUserAwardsWhencbb').append(getHideAwardsCountList());
    $propDialog.find('select#jras-gui-minShowUserAwardscbb').append(getShowAwardsCountList());

    $propDialog.find('[id*=jras-tabs-nav-]').click(function(){
      $propDialog.find('#jras-prop-gui-tabs').tabs({active: $(this).attr('id').replace('jras-tabs-nav-', '')});
    });

    if(colorScheme.isLight()){
      $propDialog.find('[id*=jras-prop-gui-tab]').css('color', '#686868');
    }else{
      $propDialog.find('[id*=jras-prop-gui-tab]').css('color', '#BBBBBB');
    }
    if(!isNewDesign){
      $propDialog.find('ul.jras-tabs-nav li a').css('padding-top', '11px');
    }

    makeServiceGUIButton();
    updateGuiLocalize();

  }

  function openProp(){
    var $propDialog = $('#jras-prop-gui-dialog');
    $propDialog.find('#jras-gui-SelectLngcbb').val(userOptions.val('currentLng'));
    $propDialog.find('#jras-gui-makeTreeCommentsVal').prop('checked', userOptions.val('makeTreeComments'));
    $propDialog.find('#jras-gui-treeCommentsOnlyFullPostVal').prop('checked', userOptions.val('treeCommentsOnlyFullPost'));
    $propDialog.find('#jras-gui-whenCollapseMakeReadVal').prop('checked', userOptions.val('whenCollapseMakeRead'));
    $propDialog.find('#jras-gui-fixedTopbarVal').prop('checked', userOptions.val('fixedTopbar'));
    $propDialog.find('#jras-gui-hideFixedTopbarVal').prop('checked', userOptions.val('hideFixedTopbar'));
    $propDialog.find('#jras-gui-isToBeLoadingUserDataVal').prop('checked', userOptions.val('isToBeLoadingUserData'));
    $propDialog.find('#jras-gui-showTooltipOnLineVal').prop('checked', userOptions.val('showTooltipOnLine'));
    $propDialog.find('#jras-gui-showTooltipOnCommentVal').prop('checked', userOptions.val('showTooltipOnComment'));
    $propDialog.find('#jras-gui-showTooltipOnPrivateMessVal').prop('checked', userOptions.val('showTooltipOnPrivateMess'));
    $propDialog.find('#jras-gui-showTooltipOnPeopleVal').prop('checked', userOptions.val('showTooltipOnPeople'));
    $propDialog.find('#jras-gui-showTooltipOnSidebarTopUsersVal').prop('checked', userOptions.val('showTooltipOnSidebarTopUsers'));
    $propDialog.find('#jras-gui-showTooltipOnSidebarOnlineVal').prop('checked', userOptions.val('showTooltipOnSidebarOnline'));
    $propDialog.find('#jras-gui-chatlaneToPacakiVal').prop('checked', userOptions.val('chatlaneToPacaki'));
    $propDialog.find('#jras-gui-hideUserAwardsWhencbb').val(userOptions.val('hideUserAwardsWhen'));
    $propDialog.find('#jras-gui-minShowUserAwardscbb').val(userOptions.val('minShowUserAwards'));
    $propDialog.find('#jras-guiBlockUserList').val(userOptions.data.BlockUsers.join("\n"));
    $propDialog.find('#jras-guiBlockTagList').val(userOptions.data.BlockTags.join("\n"));
    $propDialog.find('#jras-prop-gui-tabs').tabs({active: 0});
    $propDialog.find('#jras-prop-gui-tabs').tabs({selected: 0});
    $propDialog.find('#jras-prop-gui-tabs').tabs({focused: 0});
  }

  function updateGuiLocalize(){
    var $propDialog = $('#jras-prop-gui-dialog');
    $propDialog.find('#jras-gui-SaveSettings').attr('value', curLng.getVal('JRAS_GUI_BTNSAVE'));
    $propDialog.find('#jras-gui-sendPMforMe').attr('title', curLng.getVal('JRAS_GUI_BTNSENDPMME'));
    $propDialog.find('#jras-gui-DeleteAllSavedSettings').attr('title', curLng.getVal('JRAS_GUI_BTNDELETESETT'));
    $propDialog.find('#jras-gui-ResetSettings').attr('title', curLng.getVal('JRAS_GUI_BTNRESETSETT'));
    $propDialog.find('#jras-tabs-nav-0 a').text(curLng.getVal('JRAS_GUI_TABMAIN'));
    $propDialog.find('#jras-tabs-nav-1 a').text(curLng.getVal('JRAS_GUI_TABBLOCK'));
    $propDialog.find('#jras-tabs-nav-2 a').text(curLng.getVal('JRAS_GUI_TABTOOLTIP'));
    $propDialog.find('#jras-gui-SelectLngCaption').text(userOptions.getGuiDesc('currentLng'));
    $propDialog.find('#jras-gui-makeTreeCommentsCaption').text(userOptions.getGuiDesc('makeTreeComments'));
    $propDialog.find('#jras-gui-treeCommentsOnlyFullPostCaption').text(userOptions.getGuiDesc('treeCommentsOnlyFullPost'));
    $propDialog.find('#jras-gui-whenCollapseMakeReadCaption').text(userOptions.getGuiDesc('whenCollapseMakeRead'));
    $propDialog.find('#jras-gui-fixedTopbarCaption').text(userOptions.getGuiDesc('fixedTopbar'));
    $propDialog.find('#jras-gui-hideFixedTopbarCaption').text(userOptions.getGuiDesc('hideFixedTopbar'));
    $propDialog.find('#jras-gui-isToBeLoadingUserDataCaption').text(userOptions.getGuiDesc('isToBeLoadingUserData'));
    $propDialog.find('#jras-gui-showTooltipOnLineCaption').text(userOptions.getGuiDesc('showTooltipOnLine'));
    $propDialog.find('#jras-gui-showTooltipOnCommentCaption').text(userOptions.getGuiDesc('showTooltipOnComment'));
    $propDialog.find('#jras-gui-showTooltipOnPrivateMessCaption').text(userOptions.getGuiDesc('showTooltipOnPrivateMess'));
    $propDialog.find('#jras-gui-showTooltipOnPeopleCaption').text(userOptions.getGuiDesc('showTooltipOnPeople'));
    $propDialog.find('#jras-gui-showTooltipOnSidebarTopUsersCaption').text(userOptions.getGuiDesc('showTooltipOnSidebarTopUsers'));
    $propDialog.find('#jras-gui-showTooltipOnSidebarOnlineCaption').text(userOptions.getGuiDesc('showTooltipOnSidebarOnline'));
    $propDialog.find('#jras-gui-chatlaneToPacakiCaption').text(userOptions.getGuiDesc('chatlaneToPacaki'));
    $propDialog.find('#jras-gui-hideUserAwardsWhenCaption').text(userOptions.getGuiDesc('hideUserAwardsWhen'));
    $propDialog.find('#jras-gui-minShowUserAwardsCaption').text(userOptions.getGuiDesc('minShowUserAwards'));
    $propDialog.find('#jras-guiBlockUserListCaption').text(curLng.getVal('JRAS_GUI_BLOCKUSERLIST'));
    $propDialog.find('#jras-guiBlockTagListCaption').text(curLng.getVal('JRAS_GUI_BLOCKTAGLIST'));
  }

  function makeServiceGUIButton(){
    var $propDialog = $('#jras-prop-gui-dialog');
    if(isNewDesign){
      $propDialog.find('#jras-gui-SaveSettings').css('border-radius', '3px');
      $propDialog.find('#jras-prop-gui-bottomCcontent').prepend(
       '<div id="jras-gui-sendPMforMe" class="big_button jras-gui-btn-newdesign jras-prop-gui-button-left jras-gui-btn-pmme" title=""> </div>' +
       '<div id="jras-gui-DeleteAllSavedSettings" class="big_button jras-gui-btn-newdesign jras-prop-gui-button-left jras-gui-btn-deleteall" title="" > </div>' +
       '<div id="jras-gui-ResetSettings" class="big_button jras-gui-btn-newdesign jras-prop-gui-button-left jras-gui-btn-resetdef" title="" > </div>'
      );
    }else{
      $propDialog.find('#jras-prop-gui-bottomCcontent').prepend(
       '<input id="jras-gui-sendPMforMe" style="padding-left: 3px;padding-right: 3px;width: 24px;height: 22px;" class="jras-prop-gui-button-left jras-gui-btn-pmme" title="" value="" type="button">' +
       '<input id="jras-gui-DeleteAllSavedSettings" style="padding-left: 3px; padding-right: 3px; width: 24px; height: 22px;" class="jras-prop-gui-button-left jras-gui-btn-deleteall" title="" value="" type="button">' +
       '<input id="jras-gui-ResetSettings" style="padding-left: 3px; padding-right: 3px; width: 24px; height: 22px;" class="jras-prop-gui-button-left jras-gui-btn-resetdef" title="" value="" type="button">'
      );
    }

    $propDialog.find('#jras-gui-sendPMforMe').click(function(){
      closeSettingDialog();
      sendPM('AntiUser')
    });
    $propDialog.find('#jras-gui-DeleteAllSavedSettings').click(function(){
      closeSettingDialog();
      userOptions.removeAllSavedData();
    });
    $propDialog.find('#jras-gui-ResetSettings').click(function(){
      closeSettingDialog();
      userOptions.setDef();
    });
    $propDialog.find('#jras-gui-SaveSettings').click(function(){
      var $propDialog = $('#jras-prop-gui-dialog');
      userOptions.val('currentLng', $propDialog.find('#jras-gui-SelectLngcbb').val());
      userOptions.val('makeTreeComments', $propDialog.find('#jras-gui-makeTreeCommentsVal').prop('checked'));
      userOptions.val('treeCommentsOnlyFullPost', $propDialog.find('#jras-gui-treeCommentsOnlyFullPostVal').prop('checked'));
      userOptions.val('whenCollapseMakeRead', $propDialog.find('#jras-gui-whenCollapseMakeReadVal').prop('checked'));
      userOptions.val('fixedTopbar', $propDialog.find('#jras-gui-fixedTopbarVal').prop('checked'));
      userOptions.val('hideFixedTopbar', $propDialog.find('#jras-gui-hideFixedTopbarVal').prop('checked'));
      userOptions.val('isToBeLoadingUserData', $propDialog.find('#jras-gui-isToBeLoadingUserDataVal').prop('checked'));
      userOptions.val('showTooltipOnLine', $propDialog.find('#jras-gui-showTooltipOnLineVal').prop('checked'));
      userOptions.val('showTooltipOnComment', $propDialog.find('#jras-gui-showTooltipOnCommentVal').prop('checked'));
      userOptions.val('showTooltipOnPrivateMess', $propDialog.find('#jras-gui-showTooltipOnPrivateMessVal').prop('checked'));
      userOptions.val('showTooltipOnPeople', $propDialog.find('#jras-gui-showTooltipOnPeopleVal').prop('checked'));
      userOptions.val('showTooltipOnSidebarTopUsers', $propDialog.find('#jras-gui-showTooltipOnSidebarTopUsersVal').prop('checked'));
      userOptions.val('showTooltipOnSidebarOnline', $propDialog.find('#jras-gui-showTooltipOnSidebarOnlineVal').prop('checked'));
      userOptions.val('chatlaneToPacaki', $propDialog.find('#jras-gui-chatlaneToPacakiVal').prop('checked'));
      userOptions.val('hideUserAwardsWhen', $propDialog.find('#jras-gui-hideUserAwardsWhencbb').val());
      userOptions.val('minShowUserAwards', $propDialog.find('#jras-gui-minShowUserAwardscbb').val());
      userOptions.data.BlockUsers = $propDialog.find('#jras-guiBlockUserList').val().split('\n');
      userOptions.data.BlockTags = $propDialog.find('#jras-guiBlockTagList').val().split('\n');
      updateGuiLocalize();
      userOptions.saveUserData();
      closeSettingDialog()
    });
  }

  function makeTooltips(selector){
    $(selector).tooltip({
      items: 'a',
      content: function(){
        return '<div id="jras-tooltipcontainer"' +
          'style="height: 30px; line-height: 30px; margin: 8px; color: rgb(120, 120, 120); text-align: center;">' +
          curLng.getVal('JRAS_LOADINGUSERDATA') + '</div>';
      },
      show: {effect: "fade", duration: 400},
      track: true,
      open: function(event, ui){
        var UserName = $.trim($(this).text());
        var UserLink = $(this).attr('href');
        if(typeof(event.originalEvent) === 'undefined'){
          return false;
        }
        var $tooltip = $(ui.tooltip);
        $('div.ui-tooltip').not('#' + $tooltip.attr('id')).remove();
        $tooltip.width('212px');
        $tooltip.css({
          'border-radius': '5px',
          'z-index': '500',
          'border': '1px solid rgb(102, 102, 102)',
          '-webkit-box-shadow': '6px 6px 8px 0px rgba(0, 0, 0, 0.5)',
          '-moz-box-shadow': '6px 6px 8px 0px rgba(0, 0, 0, 0.5)',
          'box-shadow': '6px 6px 8px 0px rgba(0, 0, 0, 0.5)'
        });
        var $tooltipContainer = $tooltip.find('div#jras-tooltipcontainer');
        getUserData(UserName, UserLink, $tooltipContainer);
      },
      close: function(event, ui){
        ui.tooltip.hover(function(){
          $(this).stop(true).fadeTo(400, 1);
        }, function(){
          $(this).fadeOut('400', function(){
            $(this).remove();
          });
        });
      }
    });
  }

  function getUserData(userName, userLink, $outContainer){
    var $mainBtnContainer;
    var clearContainer = function(container){
      container.find('*').remove();
      container.empty();
      container.css({
        'line-height': '',
        'text-align': '',
        'height': ''
      });
    };
    var mainBtnContainer =
      '<div ' +
      'id="jras-tooltip-mainBtnContainer" ' +
      'style="margin-top: 4px; border-top: 1px solid rgb(85, 85, 85); padding-top: 3px;">' +
      '</div>';

    if(userOptions.val('isToBeLoadingUserData')){
      GM_xmlhttpRequest({
        method: 'GET',
        url: userLink,
        onload: function(response){
          //           console.log('Loading user data from "' + userLink + '" - ' + response.status);

          if(response.status != 200){
            $outContainer.text('Loading error: ' + response.status);
            console.log("Loading user data error:  - " + response.status);
          }else{
            var doc = document.implementation.createHTMLDocument("");
            doc.documentElement.innerHTML = response.responseText;

            clearContainer($outContainer);

            var $userData = $(doc).find('div.user-awards').parent('div.sidebarContent');
            $userData.find('div.user').clone().appendTo($outContainer).css({'line-height': '22px'})
              .find('span')
              .css({
                'position': 'absolute',
                'overflow': 'hidden',
                'max-width': '66%',
                'padding-left': '8px'
              });
            if (userOptions.val('chatlaneToPacaki')){
              $outContainer.find('div.user > span').css('color', $outContainer.find('div.user').css('color'));
            }

            makeUserAwardsBlock($userData.find('div.user-awards'), $outContainer);

            var $userStars = $userData.find('div.stars').clone().appendTo($outContainer);
            $userStars.css('width', '100%');
            $userStars.find('div:not([class])').not('[style*="border: black solid 1px"]').remove();
            $userStars.find('div[class*="star-row-"]')
              .css({
                'height': '15px',
                'margin-left': '15px',
                'transform': 'scale(0.7)'
              });
            var a = isNewDesign ? 'rgb(230, 230, 230)' : 'rgb(72, 72, 72)';
            $userStars.find('[style*="border: black solid 1px"]')
              .css({
                'border': '',
                'margin-top': '3px',
                'background-color': a,
                'height': '4px'
              });
            $userData.find('div#rating-text').clone().appendTo($outContainer)
              .css('font-size', '10px')
              .css('line-height', '16px');

            var $mainBtnContainer = $outContainer.append(mainBtnContainer).find('#jras-tooltip-mainBtnContainer');

            if(isUserLogon){ // если залоген

              makeSendPMelements($mainBtnContainer, userName);

              //               $(doc).find('a.send_private_message.big_button').clone().appendTo(outContainer);

              var txtToUserAction;
              var linkToUserAction;

              if($userData.find('div#friend_link > p').is('.add_tofr_lnk.user_icons')){
                txtToUserAction = curLng.getVal('JRAS_ADDFRIEND');
                linkToUserAction = $userData.find('div#friend_link > p.add_tofr_lnk.user_icons > a[href]').attr('href');
              }else{
                if($userData.find('div#friend_link > p').is('.remove_fromfr_lnk.user_icons')){
                  txtToUserAction = curLng.getVal('JRAS_REMOVEFRIEND');
                  linkToUserAction = $userData.find('div#friend_link > p.remove_fromfr_lnk.user_icons > a[href]').attr('href');
                }
              }
              if(txtToUserAction){
                var $friendUser = $mainBtnContainer.append(
                  '<div id="jras-tooltip-frienduser" class="jras-tooltip-button" style="cursor: pointer;">' +
                  '<i class="jras-tooltip-button-img jras-tooltip-frienduser-img"></i>' +
                  '<span id="jras-tooltip-frienduser-txt" class="jras-tooltip-button-text">' + txtToUserAction + '</span>' +
                  '</div>'
                ).find('#jras-tooltip-frienduser');
                $friendUser.click({clickLink: linkToUserAction, updateContainer: $friendUser}, function(eventObject){
                  var t = eventObject.data.updateContainer.find('#jras-tooltip-frienduser-txt');
                  var ct = t.text();
                  t.text(ct + ' : wait');
                  GM_xmlhttpRequest({
                    method: 'GET', url: eventObject.data.clickLink,
                    onload: function(response){
                      if(response.status != 200){
                        t.text(ct + ' : error: ' + response.status);
                      }else{
                        t.text(ct + ' : ok');
                      }
                      eventObject.data.updateContainer
                        .css('cursor', '')
                        .removeClass('jras-tooltip-button')
                        .unbind(eventObject);
                    }
                  });
                });
              }


              txtToUserAction = null;
              if($userData.find('div#friend_link > p').is('.add_toblock_lnk.user_icons')){
                txtToUserAction = curLng.getVal('JRAS_BLOCKUSER_JR');
                linkToUserAction = $userData.find('div#friend_link > p.add_toblock_lnk.user_icons > a[href]').attr('href');
              }else{
                if($userData.find('div#friend_link > p').is('.remove_fromblock_lnk.user_icons')){
                  txtToUserAction = curLng.getVal('JRAS_UNBLOCKUSER_JR');
                  linkToUserAction = $userData.find('div#friend_link > p.remove_fromblock_lnk.user_icons > a[href]').attr('href');
                }
              }
              if(txtToUserAction){
                var $blockUserJR = $mainBtnContainer.append(
                  '<div id="jras-tooltip-blockuser-jr" class="jras-tooltip-button" style="cursor: pointer;">' +
                  '<i class="jras-tooltip-button-img jras-tooltip-blockuser-img"></i>' +
                  '<span id="jras-tooltip-blockuser-jr-txt" class="jras-tooltip-button-text">' + txtToUserAction + '</span>' +
                  '</div>'
                ).find('#jras-tooltip-blockuser-jr');
                $blockUserJR.click({clickLink: linkToUserAction, updateContainer: $blockUserJR}, function(eventObject){
                  var t = eventObject.data.updateContainer.find('#jras-tooltip-blockuser-jr-txt');
                  var ct = t.text();
                  t.text(ct + ' : wait');
                  GM_xmlhttpRequest({
                    method: 'GET', url: eventObject.data.clickLink,
                    onload: function(response){
                      if(response.status != 200){
                        t.text(ct + ' : error: ' + response.status);
                      }else{
                        t.text(ct + ' : ok');
                      }
                      eventObject.data.updateContainer
                        .css('cursor', '')
                        .removeClass('jras-tooltip-button')
                        .unbind(eventObject);
                    }
                  });
                });
              }
            }

            makeJRASTooltipElm($mainBtnContainer, userName);
          }
        }
      });
    }else{
      clearContainer($outContainer);
      $mainBtnContainer = $outContainer.append(mainBtnContainer).find('#jras-tooltip-mainBtnContainer');
      $mainBtnContainer.css({
          'margin-top': '',
          'border-top': '',
          'padding-top': ''
        });
      makeJRASTooltipElm($mainBtnContainer, userName);
    }
  }

  function makeSendPMelements(containerFoElements, userName){
    if(!isUserLogon || userName == 'anon' || userName == currentUser){
      return
    }
    var $sendPM = containerFoElements.append(
      '<div id="jras-tooltip-sendPM" class="jras-tooltip-button" style="cursor: pointer;">' +
        '<i class="jras-tooltip-button-img jras-tooltip-sendmess-img"></i>' +
        '<span class="jras-tooltip-button-text">' + curLng.getVal('JRAS_SENDPRIVMESS') + '</span>' +
      '</div>'
    ).find('#jras-tooltip-sendPM');
    $sendPM.click({user: userName}, function(eventObject){
      sendPM(eventObject.data.user)
    })
  }

  function makeJRASTooltipElm(containerFoElements, userName){
    var txtToUserAction = (userOptions.data.BlockUsers.indexOf(userName) == -1)
      ? curLng.getVal('JRAS_BLOCKUSER_JRAS')
      : curLng.getVal('JRAS_UNBLOCKUSER_JRAS');

    var $blockUserJRAS = containerFoElements.append(
      '<div id="jras-tooltip-blockuser-jras" class="jras-tooltip-button" style="cursor: pointer;">' +
      '<i class="jras-tooltip-button-img jras-tooltip-blockuser-img" style="transform: scale(.7);"></i>' +
      '<span id="jras-tooltip-blockuser-jras-text" class="jras-tooltip-button-text">' + txtToUserAction + '</span>' +
      '</div>'
    ).find('#jras-tooltip-blockuser-jras');
    $blockUserJRAS.click({dataUserName: userName, updateContainer: $blockUserJRAS}, function(eventObject){
      var t = eventObject.data.updateContainer.find('#jras-tooltip-blockuser-jras-text');
      var iof = userOptions.data.BlockUsers.indexOf(eventObject.data.dataUserName);
      if(iof == -1){
        t.text(curLng.getVal('JRAS_UNBLOCKUSER_JRAS'));
        userOptions.data.BlockUsers.push(eventObject.data.dataUserName);
      }else{
        t.text(curLng.getVal('JRAS_BLOCKUSER_JRAS'));
        userOptions.data.BlockUsers.splice(iof, 1);
      }
      userOptions.saveUserData();
    })
  }

  function makeUserAwardsBlock($userAwards, $containerFor){
    var hideUserAwardsWhen = userOptions.val('hideUserAwardsWhen');
    var minShowUserAwards = userOptions.val('minShowUserAwards');
    if (hideUserAwardsWhen != 0 && hideUserAwardsWhen < minShowUserAwards){
      hideUserAwardsWhen = +minShowUserAwards + 1;
    }
    if(hideUserAwardsWhen != 0 && $userAwards.children().length > hideUserAwardsWhen){
      var $jrasTooltipUserAwards = $containerFor.append('<div id="jras-tooltip-user-awards" class="jras-user-awards-slice" style="-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;"></div>')
        .find('#jras-tooltip-user-awards');
      $jrasTooltipUserAwards.append($userAwards.children().slice(0, minShowUserAwards));
      $jrasTooltipUserAwards.append('<div id="jras-tooltip-user-awards-hide" class="jras-user-awards-slice" style="display: none;"></div>')
        .find('#jras-tooltip-user-awards-hide')
        .append($userAwards.children().clone());

      var correctShadow = function(visible){
        if(!isNewDesign && !colorScheme.isLight()){
          return
        }
        $jrasTooltipUserAwardsHideBtn.css('background-color', '#C3C3C3');
        $jrasTooltipUserAwardsHideBtn.hover(function(){
          $(this).css('background-color', '#F0E400')
        }, function(){
          $(this).css('background-color', '#C3C3C3')
        });
        if(visible){
          $jrasTooltipUserAwardsHideBtn.css('box-shadow', '0px -4px 8px 0px rgb(138, 138, 138)');
        }else{
          $jrasTooltipUserAwardsHideBtn.css('box-shadow', '');
        }
      };
      var $jrasTooltipUserAwardsHideBtn = $jrasTooltipUserAwards.append('<div id="jras-tooltip-user-awards-hide-btn"></div>')
        .find('#jras-tooltip-user-awards-hide-btn')
        .addClass('jras-tooltip-user-awards-hide-btn')
        .addClass('jras-tooltip-user-awards-hide-btn-close');
      correctShadow(true);
      $jrasTooltipUserAwardsHideBtn.click(function(){
        var $toggleContainer = $('#jras-tooltip-user-awards-hide');
        if($toggleContainer.css('display') == 'none'){
          $toggleContainer.slideToggle('display', function(){
            $jrasTooltipUserAwardsHideBtn.toggleClass('jras-tooltip-user-awards-hide-btn-close');
            correctShadow(false);
          });
        }else{
          $jrasTooltipUserAwardsHideBtn.toggleClass('jras-tooltip-user-awards-hide-btn-close');
          correctShadow(true);
          $toggleContainer.slideToggle('display');
        }
      });
    }else{
      $userAwards.clone().appendTo($containerFor).addClass('jras-user-awards');
    }
    $containerFor.find('img').css('border', 'none')
  }

  function sendPM(userName){
    var $pmDialog = $('body #jras-send-pm-dialog');
    if($pmDialog.length == 0){
      $pmDialog = $('body').append(
          '<div id="jras-send-pm-dialog" title="" style="width: 100%;height: 100%;">' +
            '<form action="/private/create" method="POST" id="private_form" style="width: 100%;height: 100%;">' +
              '<div id="private_form_flash" style="display:none;"></div>' +
              '<input id="jras-send-pm-username" name="username" type="hidden" id="private_form_username" value="">' +
              '<textarea style="width: 100%;height: 70%;" id="private_form_text" name="text" rows="12" cols="76"></textarea>' +
               '<div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" style="margin:0; padding:0;border: none;">' +
                 '<div class="ui-dialog-buttonset">' +
                    '<input type="submit" value="" id="jras-send-pm-sendbutton">' +
                 '</div>' +
                '<div id="private_form_uploading" style="display: none;">' +
                  '<img src="http://css.joyreactor.cc/images/jquery-ui/ui-anim_basic_16x16.gif" alt="uploading...">' +
                  '<span id="jras-send-pm-sendmess"></span>' +
                '</div>' +
              '</div>' +
            '</form>' +
          '</div>'
        ).find('#jras-send-pm-dialog');
    }
    $pmDialog.attr('title', curLng.getVal('JRAS_SENDPMDIALOG_HEADERCAPTION') + userName);
    $pmDialog.find('input#jras-send-pm-username').attr('value', userName);
    $pmDialog.find('input#jras-send-pm-sendbutton').attr('value', curLng.getVal('JRAS_SENDPMDIALOG_SENDBUTTON'));
    var $pmSendMess = $pmDialog.find('span#jras-send-pm-sendmess');
    $pmSendMess.text(curLng.getVal('JRAS_SENDPMDIALOG_SENDMESS'));
    if(!colorScheme.isLight()){
      $pmSendMess.css('color', 'rgb(172, 174, 173)');
    }

    $pmDialog.dialog({
      resizable: false,
      minWidth: 300,
      minHeight: 200,
      width: 550,
      height: 300,
      title: curLng.getVal('JRAS_SENDPMDIALOG_HEADERCAPTION') + userName,
      closeText: curLng.getVal('JRAS_SENDPMDIALOG_CLOSEBUTTON'),
      show: {
        effect: "drop",
        duration: 400
      },
      hide: {
        effect: "scale",
        duration: 300
      },
      open: function(){  //function(event, ui){
        var magicNumber = 40;  //высота нижней панели
        if(isNewDesign){
          magicNumber = 55;
        }
        $('textarea#private_form_text').css({
          width: $(this).width(),
          height: $(this).height() - magicNumber
        });
      }
    });
  }

  function closeSettingDialog(){
    $('#jras-prop-gui-dialog').find('label.modal__close').click();
  }

  function newCssClass(cssClass){
    var head = document.head || document.getElementsByTagName('head')[0];
    var style = document.createElement('style');

    style.type = 'text/css';
    if(style.styleSheet){
      style.styleSheet.cssText = cssClass;
    }else{
      style.appendChild(document.createTextNode(cssClass));
    }
    head.appendChild(style);
  }

  function addNewCSSClasses(){
    newCssClass(
'     /* для старого дизайна */' +
'      .treeCross-old{' +
'        float: left;' +
'        width: 13px;' +
'        margin-top: -8px;' +
'        margin-left: -34px;' +
'        font-weight: bold;' +
'        border-radius: 14px;' +
'        display: block;' +
'        position: absolute;' +
'        height: 20px;' +
'        padding: 0 1px 0 6px;' +
'        cursor: pointer;' +
'      }' +
'      .avatarCorrect{' +
'        background: url("../images/comments.png") no-repeat;' +
'        padding-left: 9px;' +
'        left: -10px;' +
'      }' +
'      .treeCross-old-toparent {' +
'        border-radius: 6px;' +
'        height: 10px;' +
'        width: 4px;' +
'        margin-left: -37px;' +
'        margin-top: 6px;' +
'      }' +
'' +
'      /* для нового дизайна */' +
'      .treeCross-new{' +
'        float: left;' +
'        width: 10px;' +
'        border-radius: 14px;' +
'        display: block;' +
'        position: absolute;' +
'        color: rgb(255, 255, 255);' +
'        border: 2px solid rgb(255, 255, 255);' +
'        margin-top: -8px;' +
'        margin-left: -16px;' +
'        background: #DFDFDF none repeat scroll 0 0;' +
'        font-weight: bold;' +
'        font-size: 18px;' +
'        height: 28px;' +
'        padding: 0 16px 0 8px;' +
'        cursor: pointer;' +
'      }' +
'      .treeCross-new-toparent {' +
'        margin-top: 10px;' +
'        border-radius: 8px;' +
'        height: 15px;' +
'        padding: 0 12px 0 0;' +
'        margin-left: -18px;' +
'      }' +
'      .treeCross-new:hover, .treeCross-new-toparent:hover {' +
'        background-color: rgb(254, 204, 101);' +
'      }' +
'' +
'      .jras-user-awards img {' +
'        width: 16px;' +
'        height: 16px;' +
'      }' +
'      .jras-user-awards-slice img {' +
'        height: 16px;' +
'        padding-left: 3px;' +
'      }' +
'      .jras-tooltip-button:hover span, .jras-tooltip-button:hover i {' +
'        color: #CC9622;' +
'        opacity: 1;' +
'      }' +
'      .jras-tooltip-button-img {' +
'        vertical-align: middle;' +
'        width: 16px;' +
'        height: 16px;' +
'        display: inline-block;' +
'        opacity: 0.7;' +
'      }' +
'      .jras-tooltip-button-text {' +
'        padding-left: 4px;' +
'        font-size: 10px;' +
'        vertical-align: middle;' +
'        display: inline-block;' +
'        line-height: 10px;' +
'      }' +
'      .jras-tooltip-blockuser-img {' +
'        background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADEUlEQVQ4T2WTW08USRTH/1U91TUXdAoV54Ibh8tu4sZkmOyD8cFFgzEaHzaExMBb9zfAT6B8Anj3oTvx2YyYrGtMNsL6xG42uMZkBGYDYZhpEMRiYKB7ZrrbdCeMRCo5D5VT53cu9T8E352iEELhXPOAYRAiQrfvS5/SeXBujq6tyZMh5OTlRSo1qQrxKHvjhogkkwidrgu32UTr8BBbCwvySMqpUcuaOY7rAJ5fvGj0FArahUIBslSC22ig5TjwPQ8RRQHxfZzp78fnchm7q6vmWK2mB5AQEGQ+PzQ0fXZgAAfLy7D397FnWSal9D8KoO15+WgyqSXicRBKsVOrBVU9HLOsGRL0HEulVn+4d0/UP3yA327Ds2041ao+UqmYx6UWe3uHunK5N8muLlFfW4Pc35eKqvaRF+m0dun2baNVr6OxsQFVVQFC4DsOmtvbpyDZkZFFlEqwNjfhep5Ogt77x8a0g5UVfFpeNs/4/jw7d87wDg7QlhLEtvWRRqNTye/XrhmXMhmtMjcHO5EwyfN0+s1PExM3dxYX4arq1K3Xrx//wZhGFcVQFAWhUar/KmUIKQ4OTv58//70xtOn+BKPz4WAHx88uPlpYQHo7p669erV4+Dhn4lECAl+gEUiYIqi/7K5aQaA/Pj4dO3JE1iMhQDj8t27Wm12FnYs1vmeAPKXEJrKmMEYQ2iRiP5/T8/w1Xxeq758CQswSTGd1lKFgvHl7Vu0olH4nBdGq9V3x9P/N53WGOeGylg4YO/OHbD371Eul/HZ93VSzOUEV9XVrnhc1JeW4GYy7zzH0U9CSgMDGufciHIOns3isFLB31JKSmlfKKRiJjMp+vqmnY8fwYVA5MoV1Hd2zKNabTbwR3t7fxvM57ULS0tQWy38s7WF7Wbz4fj6+kxHys+yWcNvtzV1bw9JIdB9/TpIMgmFc8RcF6RcBt3dxcrRURBsjq+vf5Pycb/PMplJz/MeEdsWcQAxRQFXVRDG4BCCXUA2gakg86ll6kg2lxNeq6X5hAwDEH6wzYRIQsh8hNJT6/wV5lBT8JU2J8oAAAAASUVORK5CYII=") no-repeat scroll 0 0;' +
'      }' +
'      .jras-tooltip-sendmess-img {' +
'        background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB2UlEQVQ4T2NkoBAwUqifAWyAm5OdkwAveyoDEwMTUQb+Y/j34fPP2bv2HdrHGBPm0RAWYVlrZa3GxMREnIP+/fvPcOTwjf9rVh1vZCzNj7xTVumrzMxMnOUwF/7584+hvXnjfcbUAPdV0ooiof5RlgzyCiJE+eD+vdcMm5YfZ7h+4/EmxoxAj2WqonyRH/79ZVAxU2Tw9jdmwOUVkNM3rz/NcO/MQwYBJmaGmy8/rAAbYKYgHvn152+GD1+/MTCK8zIExdowSEjwo7jm2bP3DOuWHGNgevWZgZ+bi4GbnZXh1IOXy+EGgFT//vuP4eqz1wx/2VkYHLz0GZxcdcCG7N5xieHgjksMLD/+MujIiDKwQsMLxYB3X38wvPz0jUFehI/h379/DB++fWdgEuJm+AeKmHffGAQ4ORgYGRkZ7r/9yCDJx80gzM0JcUGqn+tKQW6OMEEuDgZxPi64s//8/cvw4/dfMJ+DlZmBhZkZLvf841eG999/MHz8/ns1Y4yX8x0HNWllJkbi0gDMlL///jMcuPnwHqOPg029gaxwnaIwPxPIicSA////M9x78/Hf5edvGsA6rM2MbHk5ONL///lLVGpiZGH+9+XnzxlHTp49QpyVeJxFsQEAvJ+vaZNelxMAAAAASUVORK5CYII=") no-repeat scroll 0 0;' +
'      }' +
'      .jras-tooltip-frienduser-img {' +
'        background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADQUlEQVQ4T6WTaWxUZRSG32/u3O27M9y5s3SWdtqZ1rZDoB20LG0ADQSqVQoaKmltBGITFVH/WLZQhdSFRQlLgIAQHLcILSaAssRqQhNoaZMCAck4aiMtlU5S6D7MdjvXGOOE8lPPz3PyPsnJk5fgfw55OP9qZQmdkWPb7sj2zGW02JFlGwKHHr5ro0FLf2sjcVV+c+/ffRowt9BqZBITR0UkVjicDpisFrV/YOS1pvbQsd++qp0yNK41Sp6y5UPB84yaVDtyC7PWZi87djcNKHXQCobBuQxZgF6gUAmLnt5w89WB6IpTjZX1l6+FP86cosFiltE7nII/j25e0nD2ozSg5omsYrOFttVVzZFExYrhSBJfft3yycEfQ+u2VM8+evVWX92a1Qsxs6QA7207icec4oH6QMebacCNw8t9IzHdjTll01lWMkJLEfT83tPifWFPeUPVrO01S3wb8ktLwRqM6PypDa0Xr7+7/rMrH6QBt5pe5GSV/1xPhWqjokA0GlNEz9SR4s2BZ4tcG6sX5myrqq2AYJKxb/dJjEe1pQ2BS99NsnC6fnqxYjJ3ZrgsPMfTX7wv5U8jZGtqnsf0NmW1vZteLgKlPLZ+2tXn80/1725uH5wEOH74/TxzuLWTScXNdqsclGsCi91W65+lMtYXz/LveH3tSpiFOJq+b+t1S0NlNTsv/2Nh5a6zBQYD//y8Gd5XKrJiheLEfWiiGSGSd3swnmwe/+Id/2zuWrntyVUg9iKQByFgsCuo9gTfIqsOtNdyrLbf61ZMDqcBbpsJTipC1BOoiRgSIIiyInRdR1ASaYH2+BoQvQiE2xAPnTlDqvZ2XLQp/FNTvSa47CLsEg8H5eCQOKgpDaMJFcOqDt39d/BM5ARETzkgKEDoW8RvnrhJntt5qTvbTnN9XgVupwSHgYdNYGERWfz9X2wihdtjcfwxMILFQ4dgdeYCOorIuT0YG7v/K3n6w9ZQpl0q8OUoyHRR2GUBCsfCwDJgdASjcRXhaAJ370WT8oU3zutSkZFsTk0Md//c5831/kAWNF6YJiXH52cYtTJFZjxmEy9RjiMsAI0gOgHtjqoTOjXqvLJuUX77o+WdpPG/NPsvfmchq5NnMwsAAAAASUVORK5CYII=") no-repeat scroll 0 0;' +
'      }' +
'' +
'      .jras-gui-btn-newdesign {' +
'        border-radius: 3px;' +
'        padding-left: 3px;' +
'        padding-right: 3px;' +
'        width: 24px;' +
'        height: 22px;' +
'      }' +
'      .jras-gui-btn-pmme {' +
'        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/ElEQVQ4T63TTyvEQRwH4GddnLko+XNycZe2nJRyc5OUHPw5yMlhSzns5qo4uEi5Skk5SznsRl6BG0ki70CbNJnR9sPP2jXHaT7Pd+Y7MwVtjkKbeQEYRLFFqBaAGYzg8o/IGKoJqGAKN00iwzjFegK6MI9tHP2CzGIFh3hOQB0nKKMba3jNQJ3YwRM2MY16I3AcA5PYxTju41xo9AWWcRbnQu++BQawhyGsoiMe7RaLeMgDUngBL9jCG0rowT6WIvJlB9excgg//tDIvgYkXOPnEXoxgbxwMhNyjrvUxANs5FTObigg4SbmAtCP0SYfUHbZ1b98phaLf8TeAXUaOZJ+0HVlAAAAAElFTkSuQmCC");' +
'        background-repeat: no-repeat;' +
'        background-position: center center;' +
'        border: medium none;' +
'      }' +
'      .jras-gui-btn-deleteall {' +
'        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABV0lEQVQ4T4XTPUiXURTH8Y9D0NDkGCqNDb0NkRLS1GYQBL04+DJpQ1BQuJQiqIsGtQQlFASJgbS6pNAiKNJUBCJCQU0NbkHgG0fOH54uPv3v8jz3nN/93nPPS4v6dRoX0r2OraOkLWk8j9FC0Im2tH3H58I/jq8NwFk8/k80pWsfE/jWAITgAbqxh6cYwSccRxem0xbaJbyMnyrgWULCfhMLmMMJXEcv5jOUuH2sBDzMm+sAd/A+AcOYLQG3K4KjIqgCerBYAi5jJW9oBjiHLyWgAz9qANcwgHfpb8V2CTiGv5nYPrzOREYSozqRtBf4k4mNUv5Thdj/wkncywMfU3wGbzCFDUSXHq5qGWO/hkt4gn5EC0cE0ZHL2QfxvVoH+IAbWc4r2ExAQGIWhvAWg3WA57if72/H7wTsYBe3MFmdm/IJjzDTZCbu4lVdBKdwsQlgFT8bmgPWFkcRlMznyAAAAABJRU5ErkJggg==");' +
'        background-repeat: no-repeat;' +
'        background-position: center center;' +
'        border: medium none;' +
'      }' +
'      .jras-gui-btn-resetdef {' +
'        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABF0lEQVQ4T6XTyypGURjG8d93A8pp4gIkp5AUIxegGMlhggsQkhswUJQBZaakMHO4DFPikwswxNRA9Grt7HZ2e5c12+t93/9+1rOe1fDP1SiZH8IMulP9GZe4K/YXAR04wAvO8ZgG+rCIqK/hNQPlAZ04wzoeSpQNYBcLeIuePOAC27m/lrkziA0s5QEjmMNWTU8ncIvPUDCVzveUzv8jrcbqCq8CEG5f4QQr+KoxHH07GMs8mMUNPmoMt+MIozguy0EVZxyToSID9CdXN6smU/0wqWjmFZxiD/cVkGGsYrmYg7YUpLjKMkhEPMybx3sREN+t2E/FSGUkMlRmUW5JIfoZ/guQ7fdiGj1pIzJyjWbVY6rp4W/bN3aAMKpdgLqNAAAAAElFTkSuQmCC");' +
'        background-repeat: no-repeat;' +
'        background-position: center center;' +
'        border: medium none;' +
'      }' +
'' +
'' +
'      .jras-tooltip-user-awards-hide-btn-close{' +
'        position: relative;' +
'        box-shadow: 0 -4px 8px 0 rgb(0, 0, 0);' +
'        margin-bottom: -6px;' +
'      }' +
'      .jras-tooltip-user-awards-hide-btn{' +
'        background-color: rgb(80, 80, 80);' +
'        height: 5px;' +
'        width: 105%;' +
'        margin-left: -5px;' +
'        top: -4px;' +
'        border-radius: 0 0 10px 10px;' +
'      }' +
'      .jras-tooltip-user-awards-hide-btn:hover{' +
'        background-color: rgb(0, 135, 21);' +
'      }' +
'      .jras-prop-gui-content, .jras-prop-gui-contentTop, .jras-prop-gui-contentBottom{' +
'        background-color: #2F2E2E;' +
'        position: absolute;' +
'        top: 0;' +
'        left: 0;' +
'        width: 100%;' +
'        height: 30px;' +
'        overflow: hidden;' +
'      }' +
'      .jras-prop-gui-contentTop{' +
'        margin-bottom: 5px;' +
'      }' +
'      .jras-prop-gui-contentBottom{' +
'        top: auto;' +
'        bottom: 0;' +
'        height: 30px;' +
'        overflow: hidden;' +
'        margin-top: 5px;' +
'      }' +
'      .jras-prop-gui-contentMain{' +
'        position: absolute;' +
'        top: 30px;' +
'        left: 0;' +
'        right: 0;' +
'        bottom: 30px;' +
'        overflow: auto;' +
'        background-color: #262626;' +
'      }' +
'      .jras-prop-gui-section{' +
'        margin-top: 5px;' +
'        margin-bottom: 14px;' +
'      }' +
'      .jras-prop-gui-button-right{' +
'        padding-left: 20px;' +
'        right: 0px;' +
'        padding-right: 20px;' +
'        margin-right: 5px;' +
'        position: absolute;' +
'        margin-top: 4px;' +
'        height: 22px;' +
'      }' +
'      .jras-prop-gui-button-left{' +
'        left: 0px;' +
'        margin-left: 5px;' +
'        margin-top: 4px;' +
'        cursor: pointer;' +
'      }' +
'' +
'     .jras-topbar_wr {height: 10px;}' +
'     .jras-topbar_wr:hover {height: 48px;}' +
'     .jras-topbar_wr:hover .topbar_inner {display: block;}' +
'     .jras-topbar_inner { display: none;}' +
'' +
'     .jras-tabs-panel-content {padding: 6px 10px;}' +
'' +
'     #jras-prop-gui-dialog{' +
'       border: 0;' +
'       width: 100%;' +
'     }' +
'     #jras-prop-gui-dialog .jras-tabs-nav{' +
'       margin-left: 6px;' +
'       margin-top: 6px;' +
'       float: left;' +
'       width: 25%;' +
'       border: 0;' +
'       background: none;' +
'     }' +
'     #jras-prop-gui-dialog .jras-tabs-nav li{' +
'       height: 30px;' +
'       clear: left;' +
'       width: 100%;' +
'       margin: 0 0 5px 0;' +
'       background: #2d2d2d none repeat scroll 0 0;' +
'       border: 0 none;' +
'       padding: 0 0 3px 5px;' +
'       font-weight: normal;' +
'       border-radius: 3px;' +
'     }' +
'     #jras-prop-gui-dialog .jras-tabs-nav li.ui-tabs-active{' +
'       background-color: #3e7a35;' +
'     }' +
'     #jras-prop-gui-dialog .jras-tabs-nav li.ui-state-focus{' +
'       background-color: #2b5326;' +
'     }' +
'     #jras-prop-gui-dialog .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited{' +
'       line-height: 30px;' +
'       color: #818181;' +
'       text-decoration: none;' +
'     }' +
'     #jras-prop-gui-dialog .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited{' +
'       color: #d4d4d4;' +
'       font-weight: bold;' +
'       text-decoration: none;' +
'       line-height: 30px;' +
'     }' +
'     #jras-prop-gui-dialog .jras-tabs-panel{' +
'       box-shadow: -1px 0 20px 0 #000000;' +
'       border: 0;' +
'       left: 25%;' +
'       height: 100%;' +
'       overflow: auto;' +
'       position: absolute;' +
'       float: right;' +
'       right: 0;' +
'     }' +
'' +
'      /* Окно настроек  */' +
'      .modal {' +
'        z-index: 1000;' +
'        opacity: 0;' +
'        visibility: hidden;' +
'        position: fixed;' +
'        top: 0;' +
'        right: 0;' +
'        bottom: 0;' +
'        left: 0;' +
'        text-align: left;' +
'        background: rgba(0,0,0, .9);' +
'        transition: opacity .25s ease;' +
'      }' +
'      .modal__bg {' +
'        position: absolute;' +
'        top: 0;' +
'        right: 0;' +
'        bottom: 0;' +
'        left: 0;' +
'        cursor: pointer;' +
'      }' +
'      .modal-state {' +
'        display: none;' +
'      }' +
'      .modal-state:checked + .modal {' +
'        opacity: 1;' +
'        visibility: visible;' +
'      }' +
'      .modal-state:checked + .modal .modal__inner {' +
'        top: 0;' +
'      }' +
'      .modal__inner {' +
'        transition: top .25s ease;' +
'        position: absolute;' +
'        top: -20%;' +
'        width: 55%;' +
'        margin-left: 42%;' +
'        margin-top: 20px;' +
'        overflow: auto;' +
'        background: #fff;' +
'        border-radius: 5px;' +
'        height: 55%;' +
'      }' +
'      .modal__close {' +
'        position: absolute;' +
'        right: 8px;' +
'        top: 8px;' +
'        width: 1.1em;' +
'        height: 1.1em;' +
'        cursor: pointer;' +
'      }' +
'      .modal__close:after,' +
'      .modal__close:before {' +
'        content: "";' +
'        position: absolute;' +
'        width: 2px;' +
'        height: 1.5em;' +
'        background: #ccc;' +
'        display: block;' +
'        transform: rotate(45deg);' +
'        left: 50%;' +
'        margin: -3px 0 0 -1px;' +
'        top: 0;' +
'      }' +
'      .modal__close:hover:after,' +
'      .modal__close:hover:before {' +
'        background: #aaa;' +
'      }' +
'      .modal__close:before {' +
'        transform: rotate(-45deg);' +
'        }' +
'      @media screen and (max-width: 768px) {' +
'        .modal__inner {' +
'          width: 93%;' +
'          height: 93%;' +
'          margin-left: 3%;' +
'          box-sizing: border-box;' +
'        }' +
'      }' +
'      @media screen and (max-height: 600px) {' +
'        .modal__inner {' +
'          height: 75%;' +
'          box-sizing: border-box;' +
'        }' +
'      }' +
'      @media screen and (max-height: 400px) {' +
'        .modal__inner {' +
'          height: 91%;' +
'          box-sizing: border-box;' +
'        }' +
'      }'
    );
  }

  function makeBlockPostElements(forElm, parentID, blockMess, blockMessBold, blockMessDesc){
    if($('#togglebutton' + parentID)[0]){
      return
    }
    var newElement = document.createElement("input");
    newElement.style.marginRight = '30px';
    newElement.style.paddingLeft = '20px';
    newElement.style.paddingRight = '20px';
    newElement.id = 'togglebutton' + parentID;
    newElement.type = 'button';
    newElement.value = curLng.getVal('JRAS_TOGGLEBUTTONCAPTIONSHOW');
    newElement.onclick = function(){
      var toggleContainer = $('#' + parentID + ' > div');
      var buttonCaption = toggleContainer.css('display') != 'none'
        ? curLng.getVal('JRAS_TOGGLEBUTTONCAPTIONHIDE')
        : curLng.getVal('JRAS_TOGGLEBUTTONCAPTIONSHOW');
      toggleContainer.slideToggle('display');
      $('#togglebutton' + parentID).attr("value", buttonCaption);
    };
    forElm.parentElement.insertBefore(newElement, forElm);
    var newDIV = document.createElement("div");
    newDIV.style.display = 'inline';
    forElm.parentElement.insertBefore(newDIV, forElm);
    newElement = document.createElement("span");
    newElement.textContent = blockMess;
    newDIV.appendChild(newElement);
    newElement = document.createElement("span");
    newElement.style.fontWeight = 'bold';
    newElement.textContent = blockMessBold;
    newDIV.appendChild(newElement);
    newElement = document.createElement("span");
    newElement.textContent = blockMessDesc;
    newDIV.appendChild(newElement);
  }

  function makeBlockCommElements(forElm, parentID, blockMess, blockMessBold, blockMessDesc){
    if($('#newToggle_' + parentID)[0]){
      return
    }
    var newDIV = document.createElement("div");
    newDIV.id = 'newToggle_' + parentID;
    newDIV.style.display = 'inline';
    forElm.parentElement.insertBefore(newDIV, forElm);
    var newElement = document.createElement("span");
    newElement.textContent = blockMess;
    newElement.style.cursor = 'pointer';
    newElement.style.color = 'rgb(242, 119, 119)';
    //     newElement.className = 'comment_show';
    if(isNewDesign){
      newElement.style.paddingLeft = '20px';
    }
    newElement.onclick = function(){
      $('#' + parentID + ' > div.txt').slideToggle('display');
    };
    newDIV.appendChild(newElement);
    newElement = document.createElement("span");
    newElement.style.fontWeight = 'bold';
    newElement.textContent = blockMessBold;
    newDIV.appendChild(newElement);
    newElement = document.createElement("span");
    newElement.textContent = blockMessDesc;
    newDIV.appendChild(newElement);
  }

  function isNewVersion(currLoc){
    var regEx = /^((https?:)(\/\/\/?)([\w]*(?::[\w]*)?@)?([\d\w\.-]+)(?::(\d+))?)?([\/\\\w\.()-]*)?(?:([?][^#]*)?(#.*)?)*/gmi;
    var matches = regEx.exec(currLoc);
    if(matches[5] == undefined){
      return false
    }
    return matches[5] != 'old.reactor.cc';
  }

  function pageIs(page){
    var retVal = false;
    var regEx = /^((https?:)(\/\/\/?)([\w]*(?::[\w]*)?@)?([\d\w\.-]+)(?::(\d+))?)?([\/\\\w\.()-]*)?(?:([?][^#]*)?(#.*)?)*/gmi;
    var matches = regEx.exec(currentPage);
    if(matches[7] !== undefined){
        if (matches[7].match(new RegExp('.*(' + page + ').*'))){
          retVal = true;
        }
    }
    return retVal;
  }

  function getHideAwardsCountList(){
    var retVal = '';
    for(var i = 0; i < 101; i += 5){
      if (i != 0 && i < 20){continue}
      retVal += '<option value="' + i + '">' + i + '</option>';
    }
    return retVal;
  }

  function getShowAwardsCountList(){
    var retVal = '';
    for(var i = 10; i < 101; i += 10){
      retVal += '<option value="' + i + '">' + i + '</option>';
    }
    return retVal;
  }

  function initLng(){
    return {
      getVal: function(val){
        var cl = userOptions.val('currentLng');
        if(!this[val][cl]){
          return this[val]['ru'];
        }
        return this[val][cl];
      },

      getHTMLList: function(){
        var retVal = '';
        for(var a in this.JRAS_LANGLIST){
          retVal += '<option value="' + a + '">' + this.JRAS_LANGLIST[a] + '</option>';
        }
        return retVal;
      },

      JRAS_LANGLIST: {
        ru: 'Русский',
        en: 'English'
      },
      JRAS_POSTBLOCKBYUSER: {
        ru: 'Пост заблокированного пользователя: ',
        en: 'Post is blocked by Username: '
      },
      JRAS_TOGGLEBUTTONCAPTIONHIDE: {
        ru: 'Скрыть',
        en: 'Hide'
      },
      JRAS_TOGGLEBUTTONCAPTIONSHOW: {
        ru: 'Показать',
        en: 'Show'
      },
      JRAS_POSTBLOCKBYTAG: {
        ru: 'Пост заблокированый по тегам: ',
        en: 'Post is blocked by Tag: '
      },
      JRAS_COMMBLOCKBYUSER: {
        ru: 'Коментарий заблокированного пользователя: ',
        en: 'Comment is blocked by Username: '
      },
      JRAS_GUI_SELECTLANGUAGE: {
        ru: 'Язык интерфейса: ',
        en: 'Language: '
      },
      JRAS_GUI_MAKETREECOMMENTS: {
        ru: ' Создавать дерево коментариев',
        en: ' Makr tree comments'
      },
      JRAS_GUI_TREECOMMENTSONLYFULLPOST: {
        ru: ' Дерево коментариев только для полного поста',
        en: ' treeCommentsOnlyFullPost'
      },
      JRAS_GUI_WHENCOLLAPSEMAKEREAD: {
        ru: ' При сворачивании комментариев все дочерние помечаются прочитанными',
        en: ' whenCollapseMakeRead'
      },
      JRAS_GUI_FIXEDTOPBAR: {
        ru: ' Зафиксировать верхнюю панель наверху окна',
        en: ' fixedTopbar'
      },
      JRAS_GUI_HIDEFIXEDTOPBAR: {
        ru: ' Скрывать зафиксированную верхнюю панель',
        en: ' hideFixedTopbar'
      },
      JRAS_GUI_ISTOBELOADINGUSERDATA: {
        ru: ' Загружать данные пользователя для Tooltip\u0027а',
        en: ' isToBeLoadingUserData'
      },
      JRAS_GUI_HIDEUSERAWARDSWHEN: {
        ru: ' Если медалек больше чем: ',
        en: ' hideUserAwardsWhen: '
      },
      JRAS_GUI_MINSHOWUSERAWARDS: {
        ru: ' то показывать первые: ',
        en: ' minShowUserAwards: '
      },
      JRAS_GUI_SHOWTOOLTIPONLINE: {
        ru: ' Показывать в ленте',
        en: ' showTooltipOnLine'
      },
      JRAS_GUI_SHOWTOOLTIPONCOMMENT: {
        ru: ' Показывать в коментариях',
        en: ' showTooltipOnComment'
      },
      JRAS_GUI_SHOWTOOLTIPONPRIVATEMESS: {
        ru: ' Показывать на странице ПМ',
        en: ' showTooltipOnPrivateMess'
      },
      JRAS_GUI_SHOWTOOLTIPONPEOPLE: {
        ru: ' Показывать на странице Люди',
        en: ' showTooltipOnPeople'
      },
      JRAS_GUI_SHOWTOOLTIPONSIDEBARTOPUSERS: {
        ru: ' Показывать в правом баре для юзеров топа',
        en: ' showTooltipOnSidebarTopUsers'
      },
      JRAS_GUI_SHOWTOOLTIPONSIDEBARONLINE: {
        ru: ' Показывать в правом баре для аватарок',
        en: ' showTooltipOnSidebarOnline'
      },
      JRAS_GUI_CHATLANETOPACAKI: {
        ru: ' Убирать цветовую отметку донатера',
        en: ' chatlaneToPacaki'
      },
      JRAS_GUI_BLOCKUSERLIST: {
        ru: 'Заблокированные пользователи',
        en: 'Blocked users'
      },
      JRAS_GUI_BLOCKTAGLIST: {
        ru: 'Заблокированные теги',
        en: 'Blocked tags'
      },
      JRAS_GUI_BTNSAVE: {
        ru: 'Сохранить',
        en: 'Save'
      },
      JRAS_GUI_BTNSENDPMME: {
        ru: 'Отправить мне персональное сообщение',
        en: 'Send PM for me'
      },
      JRAS_GUI_BTNDELETESETT: {
          ru: 'Удалить все сохраненные данные',
          en: 'Delete all saved data'
      },
      JRAS_GUI_BTNRESETSETT: {
          ru: 'Настройки по умолчанию',
          en: 'Reset settings to default'
      },
      JRAS_GUI_TABMAIN: {
        ru: 'Общие',
        en: 'General'
      },
      JRAS_GUI_TABBLOCK: {
        ru: 'Блокировки',
        en: 'Blocks'
      },
      JRAS_GUI_TABTOOLTIP: {
        ru: 'Tooltip\u0027ы',
        en: 'Tooltips'
      },
      JRAS_LOADINGUSERDATA: {
        ru: 'Загрузка данных...',
        en: 'Load data...'
      },
      JRAS_SENDPRIVMESS: {
        ru: 'Отправить сообщение',
        en: 'Send message'
      },
      JRAS_ADDFRIEND: {
        ru: 'Добавить в друзья',
        en: 'Add as friend'
      },
      JRAS_REMOVEFRIEND: {
        ru: 'Удалить из друзей',
        en: 'Remove from friends'
      },
      JRAS_BLOCKUSER_JR: {
        ru: 'Блокировать юзера (JR)',
        en: 'Block user (JR)'
      },
      JRAS_UNBLOCKUSER_JR: {
        ru: 'Разблокировать юзера (JR)',
        en: 'Unblock user (JR)'
      },
      JRAS_BLOCKUSER_JRAS: {
        ru: 'Блокировать юзера (JRAS)',
        en: 'Block user (JRAS)'
      },
      JRAS_UNBLOCKUSER_JRAS: {
        ru: 'Разблокировать юзера (JRAS)',
        en: 'Unblock user (JRAS)'
      },
      JRAS_SENDPMDIALOG_SENDBUTTON: {
        ru: 'Отправить',
        en: 'Send'
      },
      JRAS_SENDPMDIALOG_CLOSEBUTTON: {
        ru: 'Закрыть',
        en: 'Close'
      },
      JRAS_SENDPMDIALOG_HEADERCAPTION: {
        ru: 'Отправка сообщения для ',
        en: 'Send message for '
      },
      JRAS_SENDPMDIALOG_SENDMESS: {
        ru: 'Отправка данных...',
        en: 'Sending...'
      } 
    }
    
  }

}());