    function bmUser(application, owner, parameters)
    {
      if (parameters !== false)
      {
        this.create(application, owner, parameters);
      }
    }

    bmUser.inherit(bmCustomControl);
    bmUser.prototype.defaultUserIdentifier = 42;
    bmUser.prototype.identifier = 42;
    bmUser.prototype.nick = 'guest';
    bmUser.prototype.email = 'guest@weborama.ru';
    bmUser.prototype.avatar = null;
    bmUser.prototype.mood = 1;
    bmUser.prototype.moodX = -1;
    bmUser.prototype.moodY = -1;
    bmUser.prototype.sex = 0;
    bmUser.prototype.city = '';
    bmUser.prototype.about = '';
    bmUser.prototype.profile = null;
    bmUser.prototype.rating = 0;
    bmUser.prototype.offset = 3;
    bmUser.prototype.countryName = 'Не указано';
    bmUser.prototype.countryId = 0;
    bmUser.prototype.online = true;
    bmUser.prototype.info = '';
    bmUser.prototype.playlists = null;
    bmUser.prototype.playlistsWorking = '/modules/user/rp/userPlaylistsWork.php';
    bmUser.prototype.suspendContent = '/modules/user/rp/suspendContent.php';
    bmUser.prototype.userMessagesWorking = '/modules/user/rp/userMessagesWork.php';
    bmUser.prototype.loginPath = '/modules/global/login/rp/getUserInfo.php';
    bmUser.prototype.lastPlaylist = 0;
    bmUser.prototype.newMessagesCount = 0;
    bmUser.prototype.community = 0; // id сообщества, радио которого слушает сейчас юзер

    bmUser.prototype.filter = {'popularSettings' : 0, 'languageSettings' : 0, 'yearSettings' : 'all', 'tagSettings' : 'all'};
    bmUser.prototype.defaultUser = '';
    bmUser.prototype.uriName = 'weboramer';
    bmUser.prototype.displayNames = 2;

    bmUser.prototype.create = function(application, owner, parameters)
    {
      this.identifier = 42;
      this.nick = 'klmn13';
      this.email = 'klmn@kl.ru';
      this.avatar = '';
      this.mood = 3;
      this.moodX = 102;
      this.moodY = 52;
      this.sex = 0;
      this.city = '';
      this.about = '';
      this.profile = false;
      this.rating = 0;
      this.offset = 0;
      this.countryName = 'Не указано';
      this.countryId = 0;
      this.timeOnline = 0;
      this.info = 'http://www.weborama.ru/we/klmn13/often/';
      this.avatarLink = {32: 'http://node2.weborama.ru/avatar/32/default', 64: 'http://node2.weborama.ru/avatar/64/default'};
      this.uriName = 'klmn13';
      this.displayNames = '2';

      this.playlists = eval([]);
      this.newMessagesCount = '0';

      bmCustomControl.prototype.create.call(this, application, owner, parameters);
      this.ownEvents = {'onaddplaylist': null,
                        'onremoveplaylist' : null,
                        'onupdateplaylist' : null,
                        'ongetnewmessages' : null,
                        'onremovesongfromplaylist' : null,
                        'onremoveSuspendedSongs' : null,
                        'onaddSuspendedSongs' : null};

      var sender = this;

      sender.callOnAddPlaylist = function()
      {
        var event = sender.lastPlaylist;

        sender.callHandlers(event, 'onaddplaylist');

      }

      sender.callOnRemovePlaylist = function()
      {
        var event = sender.lastPlaylist;

        sender.callHandlers(event, 'onremoveplaylist');

      }

      sender.callOnUpdatePlaylists = function()
      {
        var event = sender.playlists;

        sender.callHandlers(event, 'onupdateplaylists');
      }

      sender.callOnGetNewMessages = function()
      {
        var event = sender.newMessagesCount;

        sender.callHandlers(event, 'ongetnewmessages');

      }

      sender.callOnRemoveSongFromPlaylist = function(countSongsInPlaylist)
      {
        var event = {'countSongs' : countSongsInPlaylist};

        sender.callHandlers(event, 'onremovesongfromplaylist');

      }

      sender.callOnRemoveSuspendedSongs = function(countSuspendedSongs)
      {
        var event = {'countSongs' : countSuspendedSongs};

        sender.callHandlers(event, 'onremoveSuspendedSongs');
      }

      sender.callOnAddSuspendedSongs = function(countSuspendedSongs)
      {
        var event = {'countSongs' : countSuspendedSongs};

        sender.callHandlers(event, 'onaddSuspendedSongs');
      }

      sender.callHandlers = function(event, eventName)
      {
        if ((handlers = sender.events[eventName]) != null)
        {
          var handler;
          var i;
          for (i in handlers)
          {
            handler = handlers[i];
            var result = handler(event);
            if (result)
            {
              return false;
            }
          }
        }
      }

      sender.addPlaylist = function(playlistInfo)
      {
        var name = playlistInfo['title'];
        var mood = playlistInfo['mood'];

        var playlistIndex = sender.getIndexPlaylist(name);

        if (playlistIndex !== false)
        {
          sender.lastPlaylist = sender.playlists[playlistIndex];

          sender.callOnAddPlaylist();
        }
        else
        {
          playlistInfo.songsCount = 0;

          sender.playlists.reverse();
          sender.playlists.push(playlistInfo);
          sender.playlists.reverse();

          name = encodeURIComponent(name);

          application.httpGateway.get(sender.playlistsWorking + '?name=' + name + '&mood=' + mood + '&type=add', sender.addPlaylistGetRequest);
        }
      }

      // метод позвращает значение ключа, по которому храниться плейлист, задаваемый параметром title
      // в случае неудачи возвращает false
      sender.getIndexPlaylist = function(title)
      {
        var result = false;

        for (var playlistIndex in sender.playlists)
        {
          if (sender.playlists[playlistIndex].title.toLowerCase() == title.toLowerCase())
          {
            result = playlistIndex;
            break;
          }
        }

        return result;
      }

      sender.addPlaylistGetRequest = function(event)
      {
        var dataQuery = eval('(' + event.data + ')');
        sender.playlists[0].identifier = dataQuery.identifier;
        sender.lastPlaylist = sender.playlists[0];
        sender.callOnAddPlaylist();
      }

      sender.removePlaylist = function(playlistId)
      {

        var cachePlaylist = false;
        for(var i in sender.playlists)
        {
          if(sender.playlists[i].identifier == playlistId)
          {

            sender.playlists.splice(i, 1);
            cachePlaylist = true;
            break;
          }
        }

        if(cachePlaylist == true)
        {
          application.httpGateway.get(sender.playlistsWorking + '?id=' + playlistId + '&type=remove', sender.removePlaylistGetRequest);
        }

      }

      sender.removePlaylistGetRequest = function(event)
      {
        var dataQuery = eval('(' + event.data + ')');
        if(dataQuery != false)
        {
          sender.lastPlaylist = dataQuery;
          sender.callOnRemovePlaylist();
        }
      }

      sender.updatePlaylists = function()
      {
        sender.playlists = new Array();
        application.httpGateway.get(sender.playlistsWorking + '?type=update', sender.updatePlaylistGetRequest);
      }

      sender.updatePlaylistGetRequest = function(event)
      {
        var dataQuery = eval('(' + event.data + ')');

        if(dataQuery != false)
        {
          for(var playlistIndex in dataQuery)
          {
            sender.playlists.push(dataQuery[playlistIndex]);
          }
          sender.callOnUpdatePlaylists();
        }

      }

      sender.checkNewMessages = function()
      {
        application.httpGateway.get(sender.userMessagesWorking, sender.checkNewMessagesHandler);
      }

      sender.checkNewMessagesHandler = function(event)
      {
        var newMessagesCount = eval('(' + event.data + ')');
        sender.newMessagesCount = newMessagesCount;

        if(sender.newMessagesCount > 0)
        {
          sender.callOnGetNewMessages();
        }

      }

      sender.addSongsToPlayList = function(playlistId, songIds)
      {
        songIds = songIds.join(',');
        application.httpGateway.get(sender.playlistsWorking + '?type=addSongs&playlistId=' + playlistId +'&songIds=' + songIds, sender.addSongToPlayListHandler);

      }

      sender.addSongToPlayListHandler = function(event)
      {
        var data = eval('(' + event.data + ')');
        sender.updateUserPlaylists(data);
      }

      sender.removeSongFromPlaylist = function(playlistId, songId)
      {
        application.httpGateway.get(sender.playlistsWorking + '?type=removeSong&playlistId=' + playlistId +'&songId=' + songId, sender.removeSongFromPlaylistHandler);
      }

      sender.removeSongFromPlaylistHandler = function(event)
      {
        var data = eval('(' + event.data + ')');
        sender.updateUserPlaylists(data);
        sender.callOnRemoveSongFromPlaylist(data.countSongs);
      }

      sender.updateUserPlaylists = function(data)
      {
        var playlists = new Array();
        for(var i = 0; i < sender.playlists.length; i++)
        {
          if(sender.playlists[i].identifier != data.playlistId)
          {
            playlists.push(sender.playlists[i]);
          }
          else
          {
            if (data.countSongs > 0)
            {
              playlists.reverse();
              playlists.push(sender.playlists[i]);
              playlists[i].songsCount = data.countSongs;
              playlists[i].mood = data.mood;
              playlists.reverse();
            }
          }
        }
        sender.playlists = playlists;
      }


      sender.init = function(userInfo)
      {
        var userInfo = eval('(' + userInfo.data + ')');
        sender.identifier = userInfo.identifier;
        sender.nick = userInfo.nick;
        sender.email = userInfo.email;
        sender.avatar = userInfo.avatar;
        sender.mood = userInfo.mood;
        sender.moodX = userInfo.moodX;
        sender.moodY = userInfo.moodY;
        sender.sex = userInfo.sex;
        sender.city = userInfo.city;
        sender.about = userInfo.about;
        sender.profile = userInfo.profile;
        sender.rating = userInfo.rating;
        sender.offset = userInfo.offset;
        sender.countryName = userInfo.countryName;
        sender.countryId = userInfo.countryId;
        sender.online = userInfo.online;
        sender.info = userInfo.info;
        sender.avatarLink = {32: userInfo.avatar32, 64: userInfo.avatar64};
        sender.playlists = eval(userInfo.playlists);
        sender.newMessagesCount = userInfo.newMessagesCount;
        sender.uriName = userInfo.uriName;
        application.bmvPlayer.updatePlayerUser();

        var loginForm = application.getWindow('content').document.getElementById("loginForm");
        if (loginForm !== null)
        {
          loginForm.submit();
        }
      }

      sender.login = function(email, password)
      {
        application.httpGateway.get(sender.loginPath + '?action=login&email=' + email +'&password=' + password, sender.init);
      }

      sender.logout = function()
      {
        application.httpGateway.get(sender.loginPath + '?action=logout', sender.init);
      }

      sender.suspendSongs = function(songs)
      {
        //var songsIds = songs.join(',');

        var parameters = {};

        parameters.songsIds = songs.join(',');
        parameters.action = 'add';

        application.httpGateway.sendData(sender.suspendContent, parameters, sender.suspendedSongsHandler);

      }

      sender.deleteSuspendedSongs = function(songs)
      {
        var parameters = {};

        parameters.songsIds = songs.join(',');
        parameters.action = 'remove';

        application.httpGateway.sendData(sender.suspendContent, parameters, sender.removeSuspendedSongsHandler);
      }

      sender.removeSuspendedSongsHandler = function(event)
      {

        if (event.data.trim() != '')
        {
          var data = eval('(' + event.data + ')');

          sender.callOnRemoveSuspendedSongs(data.countSongs);
        }
      }

      sender.suspendedSongsHandler = function (event)
      {
        if (event.data.trim() != '')
        {
          var data = eval('(' + event.data + ')');


          sender.callOnAddSuspendedSongs(data.countSongs);
        }
      }

      sender.suspendAlbum = function(albumId)
      {
        application.httpGateway.get(sender.suspendContent + '?albumId=' + albumId + '&type=album', sender.suspendedAlbumHandler);
      }

      sender.suspendedAlbumHandler = function(event)
      {

      }



      //window.setInterval(sender.checkNewMessages, 60000);

    }

    var application = top.application;
    application.user = new bmUser(application, application, {'name': 'user'});